Building CSS-first pages (no custom JavaScript)
Pages you bring into the portal through a bulk (ZIP) import cannot contain custom JavaScript. If they do, the page is rejected and does not import at all. This guide explains the rule, the one exception, and the CSS and built-in alternatives to use so your pages come in cleanly and behave exactly as you designed.
The rule, in one line
For security and compliance, a page imported through a bulk (ZIP) upload may not include custom JavaScript anywhere in the page — not in the <head> and not in the <body>.
<script> is not partially imported with the script stripped out — the entire page is rejected and simply does not appear. If a page you expected is missing after an import, a custom script is the most likely reason. The one exception: structured data
Structured data for search engines is unaffected. A <script type="application/ld+json"> block (JSON-LD schema, which lives in the <head>) is the only script that is allowed, and it keeps working exactly as before. You never need to remove your schema. See Social & Sharing for how schema is handled for you.
Build CSS-first instead
Almost everything people reach for JavaScript to do on a marketing page can be done with CSS, or with a built-in CMS placeholder whose own script is added by the platform (not written into your page). Building this way keeps your pages fast and makes sure they import without a hitch.
| When you want to… | Avoid (custom JavaScript) | Do this instead |
|---|---|---|
| A mobile menu / hamburger drawer | A script that toggles the drawer open | A CSS toggle using a hidden checkbox or :target — or use the portal’s dynamic menu, whose script is injected by the CMS |
| Reveal content on click / show-and-hide | A click handler that adds a class | Native <details>/<summary>, or a CSS :checked / :target pattern |
| Animations and transitions | A JavaScript animation loop | CSS transition, @keyframes, and scroll-driven CSS animation |
| Hover / focus effects and tabs | Event listeners | :hover, :focus-within, :has(), and CSS tabs |
| Your logo, menus, or login / join buttons | Custom code to build them | The built-in {{…}} CMS placeholders — the platform supplies any script they need |
If you really need JavaScript
Some pages genuinely need custom scripting that CSS cannot cover. If that is you, talk to your account manager before importing — they can advise on the right approach and arrange a JavaScript allowance for your account where appropriate, so you are not caught out by a page silently going missing.
Quick checklist before importing
- Search your files for
<script. Every hit that is nottype="application/ld+json"will stop that page importing. - Replace those scripts with a CSS or CMS-placeholder equivalent from the table above.
- Keep your JSON-LD schema — it is fine as it is.
- After importing, check the page actually appears. If it is missing, look for a leftover script.