Fix Your Sitemap for Framer
Framer auto-generates /sitemap.xml when you publish, but CMS Collections, dynamic detail pages, and framer.website preview domains often slip into the output and steal link equity from your real site.
Framer does more automatically than most no-code builders - which is good until you realize you can't configure your way out of its defaults. There's no sitemap.xml file to edit. The toggles live in per-page SEO panels and per-collection settings, and if you can't find them, you're stuck.
Saw a Framer marketing site recently with 34 pages published but 71 URLs in the sitemap. The extras came from CMS Collection "template" pages that had been left on Published instead of Draft, plus a /changelog/:slug dynamic page rendering an empty entry. All fixable from the editor UI, none of it documented anywhere obvious.
Common Framer Sitemap Issues
framer.websitepreview subdomain indexed alongside the custom domain- CMS Collection detail pages appearing for items you meant to leave as drafts
- Collection "template" pages (the design shell) indexable when they should be hidden
- Utility pages (404, 500, password-protected) ending up in
sitemap.xml - Localization creating duplicate URLs without hreflang
- Stale URLs persisting in the sitemap for hours after unpublish, thanks to Framer CDN caching
- No
lastmodvalues because Framer doesn't expose per-item modified timestamps - Marketing-team members accidentally flipping "Hide from search engines" off on hub pages
Staged vs published, and the framer.website trap
Framer has two kinds of "live" URLs: the Staging domain (*.framer.website) and your custom domain. By default both are indexable. If your custom domain is acme.com, Google will happily index acme.framer.website as a duplicate unless you stop it.
Fix: under Site Settings > Domains, set your custom domain as primary. Framer will 301 the framer.website URL, and the preview sitemap stops being served. Double-check by requesting https://acme.framer.website/sitemap.xml and confirming it redirects (or 404s) rather than returns a live XML document.
CMS Collection gotchas
CMS Collections in Framer produce two things: the detail page template (e.g. /blog/:slug) and one URL per item. The item URLs land in the sitemap the moment you set the item to Published. Drafts are excluded - but Framer still lets you preview drafts at a live URL while you're logged in, which gives people the wrong impression that "my content is live already".
Per-item control: open the collection, click an item, toggle Draft for anything not ready. Per-collection control: there's also a collection-level "Include in sitemap" switch under the collection's SEO panel - flip it off for internal collections like testimonials or team bios that render inside other pages but shouldn't get their own URLs.
hreflang with localization
Framer's built-in localization adds locale prefixes to your URLs (/de/about, /fr/about). It lists them all in the sitemap but doesn't emit hreflang alternates. Add them via Custom Code in Site Settings > General, inserting <link rel="alternate" hreflang="..."> tags in the head. Not ideal - this should be built-in - but it's the current workaround.
Step-by-Step Fix Guide
- In Site Settings > Domains, connect a custom domain and set it as primary. Framer 301s the
framer.websitesubdomain automatically - Open Site Settings > SEO and verify "Generate sitemap.xml" is on with the correct base URL
- For each CMS Collection, disable "Include in sitemap" if the collection is internal-only
- Set each CMS item to Draft if you're not ready to publish it. Draft items don't hit the sitemap
- Mark 404, 500, and password-protected pages as "Hide from search engines" in their Page SEO panel
- For localized sites, add hreflang alternates via Custom Code
- Force a republish so Framer rebuilds
sitemap.xmland purges CDN cache - Verify with
curl https://yourdomain.com/sitemap.xmland spot-check the URL count - Submit the sitemap to Google Search Console under the production domain property