Campaign Manager 360 (CM360) HTML5 Creative Specs and Upload Guide (2026)
Campaign Manager 360 accepts an HTML5 creative as a ZIP or ADZ file of up to 100 files and 9.5 MB, with at least one click tag in the primary HTML file. It is a different product from Google Ads, which stops at 600 KB, and from Display & Video 360, which caps the served weight at 5 MB instead of the ZIP. This guide covers the CM360 rules, the click tag code it expects, and the problems that stop an upload.
Validate Your CM360 ZIP Banners
Pick CM360 in the validator to test ZIPs against the 9.5 MB limit, the 100 file maximum, the CM360 file type list and the click tag rules, in your browser and without uploading anything.
1. CM360 naming conventions and identifiers
A campaign with dozens of sizes and several versions needs names a trafficker can sort. CM360 assigns its own IDs, but the creative name is yours, so put the facts people filter by into it.
| CM360 field | What it is | Good practice |
|---|---|---|
| Creative name | Free text you set on upload | Brand_Product_Concept_300x250, with the size last so it sorts |
| Creative type | Display, display image or rich media | HTML5 ZIPs are display creatives |
| Creative ID | Numeric ID CM360 assigns on upload | Quote it in every support ticket and QA report |
| Version | Increments when assets are replaced on an existing creative | Replace assets instead of uploading a new creative, so placements keep their assignment |
| File names inside the ZIP | Paths the HTML references | No percent symbol anywhere in a file name |
2. CM360 technical specifications
From CM360's asset options for display creatives and how to prepare HTML5 display assets:
- ZIP weight: up to 9.5 MB on the asset options page. The HTML5 preparation page says 10 MB. AdCheckLab enforces the stricter 9.5 MB.
- File count: up to 100 files in the ZIP or ADZ.
- File types: HTML, HTM, JS, CSS, JPG, JPEG, GIF, PNG, JSON, XML, SVG, EOT, OTF, TTF, WOFF and WOFF2.
- Primary HTML: a complete HTML document that loads in an iframe and includes at least one click tag.
- ad.size meta tag: optional, but Google calls it the best way to make sure the creative renders at the right size. Add it anyway.
- Not allowed: ZIP files inside the ZIP, a percent symbol in any file name, and local or session storage.
- Backup image: optional, uploaded separately by the trafficker rather than inside the ZIP. It serves only when the browser or app cannot handle HTML5 and should match the creative's dimensions.
- Polite load image: under 40 KB, with the same dimensions as the backup image.
- Image creatives: GIF, JPEG, PNG or WBMP, up to 9.5 MB and 4000×4000 pixels.
CM360 publishes no animation length cap of its own, but many publishers stop at 30 seconds, so the validator warns there. Serve every asset over https://: the validator fails any http:// reference in every mode.
3. The clickTag code CM360 expects
For HTML5 uploaded directly, CM360 reads a standard variable declared in the <head> of the primary HTML file, and opens it with window.open(window.clickTag):
<head>
<meta name="ad.size" content="width=300,height=250">
<script type="text/javascript">
var clickTag = "https://www.example.com";
</script>
</head>
<body>
<a href="javascript:window.open(window.clickTag)">
<div id="banner-container"></div>
</a>
</body>
- Keep it readable. CM360 asks for the click tag without minification or obfuscation. Minify the rest of the code if you like.
- Keep it in the primary file. A declaration that only exists in a separate JS file triggers the validator's clickTag Not in the Primary HTML File warning.
- Several exits are fine. CM360 supports more than one click tag, each defining the landing page of a different exit. The validator accepts numbered click tags such as
clickTag2in CM360 mode, and rejects them in Google Ads mode, where multiple exits are not allowed. - Studio exits are a different workflow.
Enabler.exitbelongs to Studio creatives and to Google Web Designer files built in the Display & Video 360 environment, where the exit URL is set in Studio or CM360 rather than in code, as the Google Web Designer exit guide explains.
4. Problems that stop a CM360 upload
index.html is not at the root of the ZIP
Cause: the archive was made by zipping the enclosing folder, so the HTML sits one level down. Fix: select the HTML file and its asset folders together and compress those. The validator reports index.html Nested in Subfolder. Details in the missing primary asset fix.
No click tag, or the wrong casing
Cause: no declaration at all, or clicktag and ClickTag instead of clickTag. JavaScript names are case sensitive, so the ad server never finds a miscased variable. Fix: declare var clickTag in the head, or inject it with the clickTag Editor. See how to fix a missing clickTag.
Local or session storage
Cause: the banner calls localStorage or sessionStorage, which CM360 refuses to help protect user privacy. Fix: keep state in memory, and use CM360's own targeting and frequency caps instead. The validator reports Storage API Usage in CM360 mode; treat it as a blocker. More in the storage rules for display ads.
A ZIP inside the ZIP, or a percent sign in a file name
Cause: a source package or an export named like banner_50%.png. Fix: delete nested archives and rename files to letters, numbers, underscores and periods.
More than 100 files, or a file type CM360 does not take
Cause: loose animation frames, source files or video. Fix: combine images into sprite sheets and remove everything the HTML does not reference. The validator reports Too Many Files in ZIP or Unsupported File Formats with the offending names.
5. Agency trafficking QA flow
- Drop every ZIP of the campaign into the AdCheckLab Validator with CM360 selected.
- Fix every error. Read every warning, especially storage and click tag placement.
- Export the CSV QA report and attach it to the delivery.
- Upload to CM360, then check each exit in the CM360 preview.
If the same creatives also run on Google Ads or DV360, compare the rules side by side in Google Ads vs CM360 vs DV360, which also lists the DV360 rejection reasons for the DSP side.