Ad Ops 101

How to Read Doubleclick Ad Tags and Ad Tag Variables

The term ad tag is thrown around quite a bit, and can usually refer to any link involved in the ad serving process, on the publisher, or marketer side. Strictly speaking, Ad Tags are the HTML code a browser uses to fetch an advertisement from an Ad Server – it is a redirect to content rather than content itself.  There are also click tags, action tags, view tags, and other more specific variants to the general ad tag category.  For this particular example, we’ll look at publisher side tag, because our purpose is to show how ad tags help publishers organize their content into targetable products.

Ad Tag Components

So, without further ado, feast your eyes on this example a Doubleclick ad tag:;topic=abc;sbtpc=def;cat=ghi;kw=xyz;tile=1;slot=728x90.1;sz=728x90;ord=7268140825331981?

An ad tag can tell you quite a bit about how which ad ends up on a page – if you want, navigate to any major publisher and look at the source code; you can probably find a real-life example of a working ad tag. So how can you tell what the ad tag says about the publisher hierarchy and ad targeting? Let’s break it down piece by piece: – this is the host address for the Ad Server – you can see that it is not a publisher’s website, but an independent technology company that has nothing to do with publishing content.  In this example, we’re talking about Doubleclick, the Ad Serving powerhouse that was acquired by Google for $3.1 billion dollars in 2007.

/ADJ – this code defines a specific type of ad call, and what the response can be, i.e., images vs. XML vs. scripts.  For this example, the code ‘ADJ’ is the most common, and only returns images, which will serve via JavaScript.  Other responses can include ADF (only image creatives in a frame), ADX (only image creatives served through streaming technologies), as well as others.  (Thanks to Jared & Paul for correcting!)

/publisher – this is the site code that Doubleclick uses to distinguish one publisher property from another.  For example, the New York Times owns,, and among other properties.  If they are a client of Doubleclick, the corporation likely pays the bill, but each site would have its own site code so ads could be targeted to a specific paper and not the entire network.

/zone – the zone is akin to a channel level, so the Homepage vs. the Arts page, vs. the Sports page.  These content verticals are likely to attract different advertisers, so it’s important for publishers to be able to target to this kind of granularity.

Zone-Based Hierarchy vs. Topic Based Hierarchy

Here is where tagging logic starts to diverge in Doubleclick.  Some publishers prefer to deeply categorize at the zone level, while others keep moving down the hierarchy to the topic level.  The benefit of using zones over the topic, subtopic, category, or keyword levels that we’ll talk about in just a minute is that the zone is the last level in which you can pull historical reporting.  So you might have sports/baseball or even sports/baseball/nymets so you can pull traffic statistics going back months or years.

The downside with this method is that zones are vertical structures, so if you had multiple verticals on your site that all had a games section, you would have to select each games zone every time you wanted to target all games when trafficking the ads, rather than just targeting a single “games” key value.  This sounds easy on paper, but adds up to lots of extra time for your trafficking staff if you have lots of subcategories in each zone.  It wouldn’t be difficult to imagine needing 50 zones or more per content vertical to tag to the lowest level of granularity.

Which is why most Publishers tag at a higher level, and leave the granularity to the topic variable and below.  A great benefit of granular topic tagging opposed to granular zone tagging aside from being able to use the same topic tag across multiple zones is the ability for topic tags to handle wild cards when trafficking.  This means if you had topic=newyorkmarathon and topic=bostonmarathon, you could simply target topic=*marathon* and ads would automatically fall into both areas.  This makes trafficking much easier, but has the downside of no historical reporting, which can be a challenge for your Yield or Inventory teams.

topic=abc – next in the hierarchy is the topic level. As mentioned above you can use the topic level to tag similar content across zones.  For example, games in multiple content verticals or within them.

sbtpc=def – next in the hierarchy is the subtopic level.  You might use this to target sportsgames vs. adventuregames for example.  Again, you can use this to target across content verticals or within them.

kw=xyz – the keyword segment isn’t really another level in the hierarchy but a way to describe the page for contextual targeting.  The benefit here is multiple keywords are allowed.  These are typically used in guides and directories like a recipe, where you would want to be able to target chicken recipes vs. vegetarian recipes vs. winter recipes, and etc, allowing some overlapping targeting.

tile=1 – the tile variable sets a unique value for each ad call on a specific page.  If there were two or more of the same size ads on a page, separate tile values would prevent the browser from trying to serve the same ad to multiple ad slots at the same time.

slot=728x90.1 – typically defines the location of the ad tag, but is really just another type of key-value.  While this may seem duplicative with the tile value, it isn’t.  For example, tile values are often set dynamically, in the order they appear on the page.  So the first call is tile=1, the second is tile=2, and so on.  But websites use different templates all the time so the homepage may not have as many ad calls as a category page which may have a different number of calls than an article page, so the tile value isn’t designed to be a consistent variable for use in targeting.  The slot however, is.  For example, if a publisher had two of the same ad units on a given page, say a 728×90 unit at the top of the page and a 728×90 at the bottom of the page, the slot value allows them to target specifically to one or the other. That said, the publisher could just as easily set the value of this to anything they want, and it’s common to see sites re-purpose this keyvalue for another purpose, use a text value such as “leaderboard”, or not use it at all.  See Jared’s post in the comment thread below for more detail.

sz=728x90 – defines the ad size of the unit for the ad server logic.  To be clear, this doesn’t restrict the size of the ad in the unit, it just provides a targeting attribute for the ad server.  If a trafficker were to mistakenly target a 300×250 ad to a market segment with a sz=728×90 attribute however, the 300×250 creative would still serve to the 728×90 call, it would just be cut off.  It isn’t uncommon to catch one of these mistakes from time to time as you surf around the web. Additionally, you can actually include multiple values into this attribute, separated by commas.  (Thanks to Jared for correcting!)

ord=7268140825331981 – this number is a random value better known as a cache-buster.  As users move back and forth between pages of content, they often return to pages they’ve seen before, especially navigational pages like the homepage.  Browsers today try to save as much content as possible to speed up load times.  To prevent browsers from reloading the same ad multiple times (so publishers can maximize revenue and advertisers can get accurate reporting), a random number is tacked on to the end of each ad call so it looks unique to a browser and forces a new series of calls through the ad server.  Click here to read more about what a cache-buster is and how it works.

CPM, CPC, and CPA Pricing for Online Media

There are three main ways of pricing online media – CPC, CPM, and CPA.  The difference between the three is what deliverable the Publisher and Marketer agree to bill on.   As you’ll see below, the pricing structure often reflects who has the bargaining power, as well as  the quality of the product.

CPM – Premium Inventory, Premium Publishers, Premium Price

CPM, which stands for Cost-Per-Mille (Mille is Latin for “thousand”), is when the price is based on 1,000 impressions.  Almost all Publishers prefer to bill on impressions because it is an inventory based product, rather than a performance based product.  In other words, publishers risk nothing on ad performance with a CPM system and get paid for every impression.  For the largest and best-known Publishers, this is the pricing standard and in terms of overall cost, CPM priced media is almost always at the top of the food chain.

CPC – Realm of the Small Publisher and Direct Response Marketer

CPC stands for Cost-Per-Click, and is a performance-based metric.  This means the Publisher only gets paid when (and if) a user clicks on an ad, no matter how many impressions they serve trying to get the click.  As you can guess, this pricing structure is much more favorable to Marketers, but can be difficult if not impossible to negotiate with any Publisher with a premium brand, especially with all the Ad Networks and Ad Exchanges out there today willing to pick up unsold inventory and pay by CPM, albeit a low CPM.  Publishers don’t like CPC pricing because it is difficult to plan inventory demand around a moving target like click-through-rate on an ad they’ve never seen or tested before.  Two campaigns with the same CPC rate might require vastly different levels of impressions for the Publisher to bill in full and this uncertainty is a high opportunity cost to pay. Only when they’ve exhausted their ability to sell by CPM will Publishers entertain CPC offers, and by that point, Marketers are scraping the bottom of the barrel in terms of inventory availability and quality.  If you are a brand fighting for the attention of a key demographic, this simply won’t do.

For smaller publishers without much of a brand however, selling their inventory on a CPC basis is often the only option they have.  But don’t let the disdain among premium Publishers fool you, the CPC media business is an immense, multi-billion dollar market and there are plenty of people making a fortune off clicks.  Just ask Google – Google’s AdSense product is the largest CPC clearing house on earth that attracts Publishers and Marketers by the thousands.  CPC is a very low risk way to buy media because Marketers only have to pay for performance, so they have some level of confidence in their return on investment.

CPA – A Key ROI and Optimization Metric, but Rarely a Pricing Option

CPA, or Cost Per Action, or sometimes Cost Per Acquisition is the best deal of all for Advertisers in terms of risk because they only pay for media when it results in a sale, or conversion against their campaign goal.  At this level, Marketers can pick the most they’re willing to spend for a sale and can basically set an unlimited budget and forget about it.  Similarly to CPC pricing, this is usually an awful deal for Publishers.  Affiliate Marketing programs operate on a CPA basis with Publishers that are exclusively devoted to hawking their products with sites that are more advertorial than anything else.

That said, all Direct Marketers will calculate their effective CPA, or eCPA as an optimization metric and to track their Return on Investment.  An eCPA can be calculated by taking the total marketing cost and dividing it by the number of sales realized.  So, if you were a company that bought $50 worth of media to advertise a product and made 5 sales to people that clicked on your ad, your eCPA was $50 / 5 sales = $10 per sale.  This was a great deal if you make more than $10 in profit on each sale, but if not, you’ll have to rethink your marketing strategy.

Examples / Tools –

To help visualize these pricing options, look at the table below, which shows how $1,000 of media would need to be priced and perform for each method discussed above.

Cost BasisImpressionsClicksClick RateConversions (Actions)Conversion RatePriceTotal Cost
CPM100,0005000.5%5010.0%$10.00 $1,000.00
CPC100,0005000.5%5010.0%$2.00 $1,000.00
CPA100,0005000.5%5010.0%$20.00 $1,000.00

Why Do Publishers and Marketers Have Separate Ad Servers?

At first glance it might seem confusing why Publishers and Marketers both maintain their own Ad Servers. After all, what’s the point of forcing a browser to make so many trips across the internet, bouncing from Ad Server to Ad Server when technically all you need is a single Ad Server to deliver an ad?

The answer is mostly convenience, but also so Marketers and Publishers can audit each other when it comes time to bill.

Ad Servers are convenient because they allow Publishers and Marketers to centralize the nuts and bolts of getting an ad on a web page. If a Marketer bought media across ten different sites for example, without and ad server every time they wanted to change their creative assets they would have to talk to ten different publishers. Not only that, but when it came time to report on how well their campaigns did, they would have to compile ten different data sources into a single report. For a sophisticated marketer advertising multiple products to multiple audiences with multiple messages, this quickly becomes unmanageable and is distasteful from the start.

However, with an Ad Server, a Marketer can update their creative in a single place, whenever they want, and do so without needing to contact a publisher. Moreover, they can pull reporting on-demand from one place that uses the same tracking methodology.

Publishers maintain an Ad Server for the same reasons – they have multiple clients running multiple creatives for varying amounts and with different targeting requirements. Publishers also want a single source for reporting, and where they can efficiently track that they are delivering on schedule so they can bill clients in full.

Lastly, separate Ad Servers allow both parties to maintain their own independent set of reports. This forces both parties to rely on the technology when it comes time to bill rather than each others honesty. Of course, using two Ad Server that count at different times, even milliseconds apart creates the possibility for Ad Serving Discrepancies, the bane of Publishers and Marketers alike.

What is a Cache Buster?

A cache-buster is a unique piece of code that prevents a browser from reusing an ad it has already seen and cached, or saved, to a temporary memory file.

What Does a Cache-Buster Do?

The cache-buster doesn’t stop a browser from caching the file, it just prevents it from reusing it. In most cases, this is accomplished with nothing more than a random number inserted into the ad tag on each page load. The random number makes every ad call look unique to the browser and therefore prevents it from associating the tag with a cached file, forcing a new call to the ad server.

Cache-busting maximizes publisher inventory, keeps the value and meaning of an impression constant, and helps minimize discrepancies between Publisher and Marketer delivery reports.

What Does a Cache-Buster Code Look Like?

Typically, a java script function like the one below powers a cache buster. An example of a cache buster looks like this:

<script type="text/javascript" language="JavaScript">

This code is put toward the top of the page within the site’s <body> tag and creates a random number for the “ord” value in the ad tag. So, when a browser hits a tag, it builds the ad tag like this –;topic=abc;sbtpc=def;cat=ghi;kw=xyz;tile=1;slot=728x90.1;sz=728x90;ord=7268140825331981?

If the browser then returns to the same page later on, the same tag might look like this, where everything remains the same except for the random number.;topic=abc;sbtpc=def;cat=ghi;kw=xyz;tile=1;slot=728x90.1;sz=728x90;ord=6051834582234?

Why Does a Browser Cache in the First Place?

When a browser navigates to a web page today, the Publisher’s Content Server sends it an HTML file with instructions on how to format the page and where to retrieve all the images, text, and other pieces of the page.  Downloading this information all takes time and memory to accomplish for the browser, so it tries to save as much of the information as possible for future use in temporary folders (the cache) on a user’s hard drive.

This technique lets a browser surf through a website much faster.  It’s less important in an age of high speed fiber optic connections, but made a huge difference in the days of 56K modems, when each page took seconds if not minutes to load.  And, since most web pages are built on templates, many elements of a site are used on every page, for example, the site’s logo.  Why fetch the same image again and again when the browser can save it once, and simply reference the same file on every page? The browser is smart enough to read the HTML code for each page and recognize what content it already has and just skip to the next line of code to look for the unique and previously unseen data.

This would certainly work for the ads on the page, too.  If a user loaded a publisher’s homepage for example, then went to an article page, then back to the homepage, the ad tag would be exactly the same and the browser would just re-use the ad it called the first time if a cache-buster was not implemented. Since Publishers get paid for every impression though, they don’t want this to happen, they want the browser to call or consume another impression so they can charge for it. Advertisers might like the idea of free impressions, but when pressed, most would tell you cache-busting is a good thing for them, too. Recycled ads screw up reports, mess with ROI calculations, and add an uncertainty factor to campaign data, not to mention create tension between Publishers and Advertisers via discrepancies.

In fact, if you are having an issue with 3rd party discrepancies where the publisher numbers are much higher than the advertiser numbers, the first thing you should check is that a cache-buster is in place and working.