Browse 50 demo/seeded portfolios on Showcase →
Field NotesHosting SCORM8 min read

How to embed a SCORM course in Squarespace.

Squarespace gives you the page, not the runtime. Host your published package, then point one button at it — here's the button-vs-iframe call and the Code-block gotchas that break the embed.

You built the portfolio site on Squarespace because it looks sharp out of the box. Now you want your sample module on it — the interactive Storyline piece that actually shows the work. So you try the obvious thing: open a page, look for somewhere to drop the SCORM .zip, and… there isn't one. Squarespace will happily host a PDF or an image. It will not run your course.

That's not a bug, and you don't need a workaround plugin (Squarespace barely has plugins anyway). You need one good link to a player that already runs the module — and a five-minute decision about how to put it on the page.

Squarespace gives you the page. It can't give you the runtime. Host the course, then point a button at it.— the whole article in one line

Host it, then point Squarespace at the URL.

A SCORM package is a .zip that expects to talk to a JavaScript runtime — the thing that answers LMSInitialize()and records completion, score, and bookmarking. Squarespace serves files; it doesn't inject that runtime. So the play is always two steps: host the package somewhere that runs it, then point Squarespace at the launch URL.

Publish from Storyline, Rise, or Captivate, upload the package to a host that serves the player (Training OS gives you a stable HTTPS launch URL), and — before you open Squarespace — load that URL in a plain browser tab. If audio, completion, and resume work there, they survive the embed. If they don't, fix it at the host first. Squarespace can't repair a broken launch.

For a portfolio or a service site, treat that hosted URL as the single source of truth for launch. Whether you wrap it in a button or an iframe, the same link is doing the work — which is exactly what you want when you re-skin the page six months from now.

If you skip this

Open the raw launch URL in an incognito tab before you wire up a single block. Most "the demo is broken on my site" tickets are really "the course was never working" — you just hadn't looked at it outside your own logged-in session.

Two ways to put it on the page.

Once the URL works, Squarespace gives you exactly two good options. Ranked by how rarely they break on you:

1

A Button block that opens the module in a new window.

Best for: portfolios, service pages, any template you might restyle later

Recommended

Add a Button block (or a text link in a Text block), set the URL to your launch or portfolio link, and enable Open in New Windowwhere Squarespace offers it. Write real CTA copy — "Launch the sample module," not a bare URL — and put one line of context above it: how long it takes and what they'll do inside. This is the option that still works after a template update quietly resets your blocks.

What's good

  • Survives template swaps and the Code block sanitizer
  • Full-window playback — how Storyline and Rise expect to run
  • Works in site navigation for evergreen course access

What's not

  • Leaves your Squarespace page for the module
  • Not an inline-on-the-page feel
2

A Code block iframe.

Best for: a desktop landing page where the module should live inline

If you tested it

Add a Code blockand paste a minimal iframe pointing at your launch URL. Give it room — full width, at least 600px tall (720–800px for tall players), and allow="fullscreen"if your authoring tool uses the Fullscreen API. Then check every breakpoint in Squarespace's tablet and phone preview before you trust it.

What's good

  • Module feels like part of the page
  • Good for long-form pages with an inline demo

What's not

  • Squarespace's Code block sanitizes and can strip iframe attributes
  • Narrow mobile breakpoints clip the bottom of the player
  • Some templates interact badly with third-party iframes
Inline embed · paste into a Squarespace Code blockHTML
<iframe
  src="https://app.trainingos.com/m/your-module"
  width="100%"  height="760"
  allow="fullscreen"
  title="Sample module — interactive SCORM demo"
></iframe>

Where Squarespace fights you.

If the embed misbehaves, it's almost always one of three Squarespace-specific things — in order of how often they bite:

1. The Code block ate your iframe.

Squarespace sanitizes Code block markup, so it can strip or rewrite <iframe>attributes when you save. If the embed renders empty — or collapses to zero height — simplify the attributes, re-paste, and re-check. If it keeps vanishing, that's your sign to use the new-tab button instead.

2. The editor preview lies to you.

The in-editor preview runs a different context than your published page. An embed can look perfect while you're editing and break the moment it's live. Always confirm on the published URL, logged out, before you call it done — the editor caches its own render of the Code block, so a refresh inside Squarespace tells you nothing about what a visitor sees.

3. The mobile breakpoint clips the player.

Squarespace stacks sections tightly on phones, and a fixed-height iframe gets cropped at the bottom — learners lose the "next" button or the submit screen, then email you that the course "won't let them finish." Bump the height, add section padding, or fall back to a link-only pattern for small viewports. On a portfolio that hiring managers open from their phone, the button is the safer default every time.

The mistake everyone makes

Iterating directly on a live page and refreshing the editor until it looks right. Duplicate the page to a private staging page, do your fiddling there, and publish only after an incognito pass on the real URL. That logged-out view is the only one that matches what a prospect or hiring manager actually sees.

Before you hit publish.

Run this once, from a logged-out incognito window:

  • The button or iframe loads the module on the live site — not the editor preview.
  • Audio plays, completion fires, and resume works if your package relies on them.
  • It looks right on a phone — narrow Squarespace layouts crop iframes; bump the height or fall back to the button.
  • Re-open the link after any template or design change; updates love to reset block settings.

Same separation-of-concerns logic carries to other site builders, too — if you also keep work on a WordPress site, the WordPress embed walkthrough covers the plugin-and-caching gotchas, and the deeper guide to hosting SCORM ranks every place that can serve the runtime in the first place.

Frequently asked questions.

Can I host a SCORM .zip on Squarespace?

No. Squarespace serves pages and assets — it cannot run the SCORM runtime your course needs to record completion or score. Host the package somewhere that serves the player, then link or embed the launch URL on your Squarespace page.

Should I use a Button block or a Code block iframe?

Default to a Button block set to open in a new window. It survives template swaps and the Code block sanitizer, and it gives the module the full-window context Storyline and Rise expect. Reach for a Code block iframe only on a desktop landing page whose template you control and have tested on mobile.

Why did my Code block iframe disappear after I saved?

Squarespace sanitizes Code block markup and can strip or rewrite iframe attributes on save. Simplify the attributes, re-paste, and confirm on the live site — not the editor. If it keeps vanishing, switch to the new-tab button.

/06  Try it for free

Drop a SCORM file. See it live in 11 minutes.

Free for 3 modules. No card. Lifetime is $149 once. You read the article, you know how this is supposed to work — see it in your own browser.

Upload your first SCORM →
JV

About the author

Jon Vig · Ex-LMS engineer · founder, Training OS.

/07Keep readingRelated notes