Static HTML output
Framer publishes fully rendered HTML pages — not a JavaScript shell that renders content after load. Googlebot can read Framer pages without executing JavaScript first, which matters for indexing speed.
Guide · Framer
Framer handles the basics well. The gaps are real but manageable if you know where they are before you build. Here's the full picture.
What Framer handles automatically
Framer publishes fully rendered HTML pages — not a JavaScript shell that renders content after load. Googlebot can read Framer pages without executing JavaScript first, which matters for indexing speed.
All Framer sites are served from a global CDN. Time to first byte is fast by default. You don't need to configure hosting, caching or edge delivery.
Framer generates a sitemap.xml at your domain root automatically. All published pages are included. CMS pages are included when published. You don't need a plugin or custom build step for this.
SSL is provisioned automatically for all Framer domains, including custom domains. No configuration needed.
What you configure manually
In Framer's site settings, then per-page in the page settings panel. For CMS pages, you connect a title and description field from your collection. Default values fall back to the site-level settings — set those first.
Framer lets you set an OG image per page or site-wide. For CMS pages, connect it to an image field. Without this, social previews show a blank or generic image.
Framer sets the canonical to the published URL automatically. If you're syndicating content elsewhere or have duplicate pages, you can override it in page settings.
Framer doesn't enforce heading hierarchy. You're responsible for making sure each page has one H1, that H2s follow logically, and that headings aren't set by visual style only. Check this before you publish.
Every image layer in Framer has an alt text field. It's optional by default — you have to fill it in. For CMS images, connect it to a text field in your collection.
The real limitations
Framer generates a robots.txt automatically and you can't replace it. You can set individual pages to noindex in page settings, but you can't add custom directives or block specific crawlers.
Framer doesn't have a built-in way to add JSON-LD schema markup. You can add it via a custom code component or a site-wide code injection in site settings. It works, but it's not automatic.
Heavy scroll animations, large images without lazy loading, or too many font weights loaded upfront can push LCP and CLS into poor territory. Framer doesn't warn you. Run PageSpeed Insights after publishing and fix what you find.
Framer supports redirects in site settings. You add them one by one. If you're migrating a site with dozens of URLs, this gets tedious. There's no CSV import or bulk redirect tool.
The SEO checklist for a Framer site
Related
How the two tools compare on SEO, CMS and performance.
How CMS collections affect your SEO setup.
The full publish checklist — domain, SEO, testing.
Templates built with correct heading hierarchy and schema markup out of the box.
Read all the Framer guides.