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.


  1. Great article. I have been on the publishing side. I used to track ads diligently for my clients, and provide their agencies with stats, and then work out the differences. Now that I’m on the marketing side, I have an agency that uses only the stats from the publishers. The agency thought I was crazy when I asked for verification – or at least numbers from their own system. And then I thought I was crazy for asking. Not so. Looks like the landscape is changing a bit, but in order for us to get our $ worth, I’ll be asking them for some additional level of verification. Thanks for bringing back some sanity :).

  2. Hello,

    I would like to know how “key value targeting” is integrated into a SMART adserver adtag? Can anybody help please? An example would be most welcome!

    Many thanks,


  3. Hi Derek,

    I’m sorry but I don’t have any experience w/ the SMART ad server – but hopefully someone else knowledgeable will be able to answer your question. If you are still having trouble figuring this out I would suggest posting a topic on the AdMonsters publisher forum. I would also request documentation from the ad server itself, I would think this would be part of a FAQ…good luck!


  4. Great article! I have a blog and we are looking to work with an adnetwork to garner higher CPM’s vs. the CPC Google Adsense ads we have been serving. They noted “We’re currently offering our $X CPM for all the inventory we can fill and whatever inventory we cannot fill, we’ll send it back to you through the default tags you provide us.

    Where can I get default tags? We are using OIO publisher and I am a bit confused as to what she wants me to send her.

  5. Hi Allison,

    Right, since networks cannot always fill every impression you generate on your site, they need a way to refuse the ad call, letting you choose to serve something else instead. I hadn’t heard of OIO before, but looked them up (very cool!) and I would say you have two options.

    1. If you are only going to work with this one network and Adsense, my recommendation would be to get the Adsense ad code from Google, and give that to the network as your default tag. Essentially you are saying to the network, “if you can’t serve anything, serve my Google Adsense code instead”. You can get this code in the Adsense UI under My Ads > Content > Ad Units, and then clicking “get code” under each ad. Be sure that you give your network the right ad code for the right ad size so you don’t serve a 728×90 unit in a 300×250 space.

    2. Your other option is if you plan to work with more than one network and is the way most large publishers operate (or outsource through an SSP). What you would do there is give them your OIO code by looking in your WordPress account at OIO Publisher > Settings, and then providing the Javascript Output code you see at the top of the page. What you are saying to the network there is “if you can’t serve anything, call my regular ad code again”. I have to stress however that you must setup a new zone with the first network relationship excluded from that targeting, otherwise your ad code will just continue to call the first network, which will default back to you, which will call the first network again, and you’ll be stuck in an ad serving loop until the call fails or the user abandons the page.

    It sounds like you are just working with this one network and Adsense, so my advice would be to go with the former, and simply give this network your Adsense code.

    Hope that helps,


  6. i hate to be negative but the article is not 100% accurate about what the ad call means;topic=abc;sbtpc=def;cat=ghi;kw=xyz;tile=1;slot=728×90.1;sz=728×90;ord=7268140825331981?

    /ABC –this is not a publisher unique code. It will always be (ad, adi, adx, pfadx, adj, etc…) the differences represent types of ad calls DFP makes. Some will only return an image, XML, scripts etc..)

    sz=728×90 – defines the ad size of the unit. — to some extent this is true. you could easily serve a 1000×1000 into that ad call. the size doesn’t matter but for an ad to serve to that ad call the line must match the value set in the ad call

    slot=728×90.1 — this is just another keyvalue. you could easily make the difference between the top and bottom space by making it pos=top or pos=bottom on each ad call. keyvalues are totally open so based on your preference in work flow you could make it whatever you want.

  7. Thanks for the feedback, Jared – after further research, you’re absolutely correct. I will correct this article accordingly, and credit you for the information.

    Thanks again!


  8. Hi Ben!

    Awesome helpful articles, thanks a lot!
    Could you tell me, for which products does this info stand, doubleclick for advertiser, doubleclick for publisher (dfp small business/premium) or the old DART thing?


  9. Hi Bob,

    Thanks for the compliments! I wrote this article originally about DFP, the enterprise, cloud-based ad server designed for major publishers. An ad tag from the DFA, or advertiser perspective is much simpler, because it doesn’t need to collect any dynamic information about where the ad is running, as the publisher tag does.


  10. Hi Ajit,

    Hrm, an interesting question, and the answer is no, not that I can think of, at least not reliably or universally. Part of the issue is there are multiple versions of both systems, there are lots of ways to customize the implementation, and there are lots of different tag types, so it is very difficult for me to think of an attribute that is reliable across everything. Sounds like a question for the AdMonsters Forum, or perhaps the DoubleClick Boards.

    Sorry I couldn’t be of any help!


  11. Hi Paul,

    Thanks very much for the link and correction – I’ve edited the post to reflect your comments Thanks again!


  12. Hi Ben,

    Great work with this blog. Do you have a blog post that explains the ad tag format for 3rd party marketer ad server and how the ad serving and statistics logging happens ?


  13. Thanks for the great article Ben…….
    I am new into advertising and the website really helps 🙂

  14. Hey! Quick question that’s totally off topic. Do you know how to make your site mobile friendly? My web site looks weird when viewing from my iphone. I’m trying to find a theme or plugin that might be able to fix this problem.
    If you have any suggestions, please share. Appreciate it!

  15. Hi Ben,

    I accidentally clicked on your site and literally I spent 2 hours continuously for reading. Now I am a fan of you.

    So How can you explain these kind of tags
    Eg: {values changed as I am not sure to disclose or not}

    If possible throw some light on Ad-x tags.

    Waiting eagerly for your answer…



  16. Hi Sridevi,

    I’m glad you’ve found the site helpful.

    I think I may need you to tell me a bit more about your question to give you a decent answer. The two tags you provided are from Eyeblaster (MediaMind), and Celtra. MediaMind is I would say the 2nd or 3rd most prevalent 3rd party vendor most digital publishers will encounter, after Dart for Advertisers (DFA, aka Doubleclick) and Atlas (now owned by Microsoft). They are a common type of ad tag, though I’m not sure I can decode each variable for you.

    Celtra is a common mobile rich media vendor, and Ad-X tags are also for mobile tracking, but those are typically specialized for mobile application download tracking (as they typically require / capture some sort of unique identifier, like a device ID).

    I’m not sure if that really helps or not – perhaps some clarification from you would enable me to give you more information.


  17. @Jared


    sz=728×90 – defines the ad size of the unit. — to some extent this is true. you could easily serve a 1000×1000 into that ad call. the size doesn’t matter but for an ad to serve to that ad call the line must match the value set in the ad call

    When you say “the size doesn’t matter, but for an ad to serve to that ad call the line must match the value set in the ad call” what line/field are you referencing something else in the tag?

Leave a Reply

Your email address will not be published. Required fields are marked *