BannerPeek

Home / Blog

HTML5 Banner Specs 2026: Google Ads, CM360/DV360, Adform, Amazon DSP, The Trade Desk

BannerPeek · September 15, 2026

Every banner brief says "standard HTML5 specs". There is no such thing. Google Ads, Campaign Manager 360, Adform and the DSPs all want slightly different zips, and the difference between them is usually one line of JavaScript and one meta tag. This is the checklist I keep next to me when I export. It is written for people who build banners, not for media planners.

Rule zero: the numbers below are the platform maximums. The publisher or the media plan can be stricter (and often is: 150 KB is still the most common line in a brief). Ask for the spec sheet of the actual placement before you start optimising.

The parts that are the same everywhere

  • One HTML file at the root of the zip, all assets referenced with relative paths. No nested zips, no folders you forgot to flatten.
  • <meta name="ad.size" content="width=300,height=250"> in the <head>. Google Ads, CM360, DV360 and most DSPs read the size from this tag. If it is missing, some platforms guess from the file name, some reject the upload. Put it in every banner, every time.
  • Animation stops within 30 seconds, including loops. Three loops of a 10-second animation is the common interpretation; check the brief.
  • No local storage, no cookies, no external calls except the few libraries a platform explicitly whitelists.
  • A backup image (JPG/PNG/GIF, usually under 40–50 KB) in the same size. Some platforms generate it; most still ask for it.
  • Fonts and libraries: embed them or load only from the CDNs the platform allows. A Google Fonts <link> is fine on Google; the same link may fail a strict publisher's validator.

Google Ads (the self-serve platform)

RequirementValue
Zip size600 KB max (many briefs still say 150 KB; both are true depending on who you ask)
Files in the zip40 max
Accepted file typesHTML, CSS, JS, GIF, PNG, JPG, JPEG, SVG
External referencesNot allowed, except Google Fonts, CreateJS and GreenSock (GSAP) hosted files
Local storageNot allowed
Expandable / rich formatsNot supported
Click handlingThe whole ad is made clickable by Google. No clickTag variable needed. Optional ExitApi for custom exits
SizesStandard IAB sizes: 300×250, 336×280, 728×90, 970×250, 160×600, 300×600, 320×50, 320×100, 300×50 and more

The catch nobody tells designers: an advertiser account can only upload HTML5 ads if it is older than 90 days, has spent more than $9,000 USD lifetime, and has a clean policy history. If your client's account is new, your perfect zip will be rejected with a vague message and it is not your fault. Ask before you build.

Campaign Manager 360 and Display & Video 360 (Google Marketing Platform)

This is where most agency campaigns are trafficked, and the spec is more generous than Google Ads.

RequirementValue
Files in the zipup to 100
Upload sizeup to 9.5 MB per bundle (the served creative should still be far smaller; publishers cap at 150–300 KB initial load)
Click handlingAt least one clickTag, or the Enabler.exit() method if you build with Google's Enabler (Studio)
Meta tagad.size required
StructureMust run inside an iframe; no nested zips
HTTP callsmax 100 per ad when served

The classic CM360 click implementation, which also works on most DSPs:

<script>
  var clickTag = "https://www.example.com";
</script>
...
<a href="javascript:window.open(window.clickTag)">
  <!-- banner content -->
</a>

The trafficker reads the clickTag variable and swaps the destination after upload, so never hard-code the landing page in an <a href>.

Adform

Adform wants two extra things in the zip that no other platform asks for.

  1. manifest.json in the root, naming the main HTML file, the size, and every click tag the banner uses:
{
  "version": "1.0",
  "title": "Campaign 300x250",
  "description": "",
  "width": "300",
  "height": "250",
  "events": { "enabled": 1, "list": {} },
  "clicktags": { "clickTAG": "https://www.example.com" },
  "source": "300x250.html"
}
  1. The Adform DHTML library in the <head> and clicks read through dhtml.getVar:
<script src="https://s1.adform.net/banners/scripts/rmb/Adform.DHTML.js"></script>
<script>
  var clickTAGvalue = dhtml.getVar('clickTAG', 'https://www.example.com');
  document.body.onclick = function () { window.open(clickTAGvalue, '_blank'); };
</script>

Note the capitalisation: clickTAG on Adform, clickTag almost everywhere else. Adform itself accepts large zips; the weight limit comes from the publisher.

Amazon DSP

Amazon's own placements are strict on weight: 200 KB for the common desktop sizes (300×250, 728×90, 160×600), lower on mobile, and backup images around 40 KB in most markets. Standard clickTag variable. If the brief says "Sizmek spec", ask what they mean: Amazon Ad Server (the former Sizmek) was shut down at the end of 2024, and old Sizmek EB.clickthrough() code does nothing useful anymore.

The Trade Desk, Xandr, Yahoo and other DSPs

Most DSPs accept the CM360-style zip: ad.size meta, a global window.clickTag, 150–500 KB depending on the exchange. Yahoo DSP has its own adkit.clicktag() helper. Xandr reads clickTag too. When in doubt, build the CM360 version and keep the click code in one obvious place so it can be adapted in two minutes.

The export checklist

Before you zip:

  • ad.size meta tag present and correct
  • Click goes through a variable (clickTag / clickTAG / Enabler.exit), not a hard-coded URL
  • Animation stops within 30 s
  • All assets local, relative paths, no external calls except allowed CDNs
  • No localStorage, no cookies, no console errors
  • Backup image in the same size, under the weight limit
  • Zip contains files at the root, not a folder
  • Weight under the brief's limit, not the platform's
  • Adform only: manifest.json + DHTML library

One more thing: preview before you deliver

The fastest way to catch a wrong ad.size, a missing asset or a broken loop is to run the zip in a browser exactly as the ad server would: unpacked, in an iframe, at its real size, next to the other sizes of the campaign. That is what BannerPeek does; you drop the zips, it detects the sizes and gives you one link to send to the client for comments and approval. There is a free plan, no credit card.

Related reading

Related articles

Share your next campaign with one link

HTML5, image and video banners on one preview page, with pinned comments and approvals. Free while in early access.