An HTML5 banner can look perfect on a review link and still fail after upload. A font may come from the agency website, an image path may point outside the ZIP, a JavaScript library may load from a CDN, or a filename may work on a local case-insensitive filesystem but break on the ad server. The preview hides the dependency; the delivery exposes it.
A self-contained ZIP removes that uncertainty. Every production asset lives inside the package, every path resolves from the banner entry file, and the creative can be tested as the same archive ad ops will traffic.
Draw a boundary around the deliverable
Start with a simple rule: if the banner needs a file to render, animate, or click correctly, that file belongs in the production package unless the target platform explicitly supplies it.
That normally includes:
- The HTML entry file expected by the platform.
- Production CSS and JavaScript.
- Raster and vector image assets.
- Approved local font files or a documented system-font fallback.
- Platform libraries that the specification requires you to bundle.
- A backup image when the placement requires one.
Design sources, review screenshots, old exports, editable artwork, and unused media stay outside the ZIP. The goal is not to archive the project. The goal is to package the smallest complete runtime.
Fusebox
Use paths that survive extraction
Ad platforms usually unpack a ZIP into their own directory structure. Absolute paths such as /assets/product.jpg, local machine paths, and URLs tied to a review domain can stop resolving as soon as that happens. Package references should normally be relative to the HTML or stylesheet that uses them.
For a simple banner, the structure can stay boring:
campaign-300x250/
index.html
css/
banner.css
js/
banner.js
assets/
logo.svg
product.webp
background.jpg
From index.html, the script path is js/banner.js. From css/banner.css, the background path is ../assets/background.jpg. Check paths from the file where the reference is written, not from the project root in your build tool.
Avoid climbing outside the package with ../ paths that reach shared campaign folders. Shared assets can make local production convenient, but one independently uploaded size must not depend on a sibling folder that ad ops never received.
Assume filenames are case-sensitive
A reference to Logo.svg is not the same as logo.svg on many hosting systems. The mismatch can go unnoticed on a local Mac and appear only after upload. Spaces, accented characters, and punctuation also create avoidable packaging risk when tools rewrite URLs or extract archives differently.
Use a restrained naming convention:
- Lowercase filenames.
- Letters, numbers, and hyphens.
- One exact extension everywhere.
- No duplicate names that differ only by capitalization.
- No last-minute renaming after QA.
Then search the built files for every asset reference and compare it with the final ZIP contents. This catches the classic failure where product-final.webp was renamed but the CSS still asks for product.webp.
Manpower
Remove accidental network dependencies
External requests are fragile in display advertising. A CDN may be blocked by a content security policy, a client domain may change, a consent layer may delay the request, or the publisher may reject unapproved hosts. Even when an external file loads today, it creates a runtime dependency that the delivered ZIP does not control.
Before handoff, inspect the built HTML, CSS, and JavaScript for http://, https://, protocol-relative URLs, remote font imports, analytics snippets, and preview-only APIs. Keep only network calls that are explicitly required and approved by the ad platform.
GSAP and other production libraries should follow the platform specification. If the platform provides an approved hosted library, document that dependency. If it does not, package the approved minified runtime and count it in the file-weight budget. Do not silently switch between those approaches after creative QA.
Webfonts need the same decision. Either bundle licensed, subset font files; use an approved system fallback; or render a small piece of display text as an optimized image when brand and accessibility requirements allow it. A review page importing the agency’s font stylesheet is not a production plan.
Test the archive, not the source folder
The final QA object is the named ZIP that will be delivered. Create it, move it away from the project, extract it into a clean temporary folder, and open it through a simple local web server. That test removes access to parent directories and shared development assets while preserving normal browser loading behavior.
Check the browser network panel for missing files and unexpected external requests. Then confirm the observable campaign behavior:
- The first frame paints without a blank flash.
- Every image and font appears.
- Animation starts and stops as approved.
- ClickTag or platform exit behavior still works.
- The final frame retains brand, offer, CTA, and required legal copy.
- The backup image is present and matches the approved message.
- The ZIP and uncompressed asset totals meet the platform rules.
Volvo
Record the package assumptions for ad ops
A self-contained ZIP should not require a long technical manual. A short manifest row or delivery note is enough when it names the important assumptions:
- ZIP filename, size, market, and version.
- Expected HTML entry filename.
- Platform or publisher target.
- ClickTag or exit rule.
- Any approved platform-hosted dependency.
- ZIP weight and backup-image filename.
- Date and result of the clean extraction test.
That note helps ad ops distinguish a fully portable package from a platform-specific build. It also gives production a useful baseline when a publisher asks for a revised structure or another platform variant.
Portability is part of creative quality
The viewer never sees the folder structure, but the campaign depends on it. A self-contained ZIP protects the approved creative from missing assets, blocked requests, case-sensitive paths, and review-server assumptions. It also makes troubleshooting faster because every required file is present in one inspectable package.
The standard is simple: extract the delivered ZIP in a clean location, run it without the production workspace, and see the same banner the client approved. When that works, the creative is not only polished. It is ready to traffic.


