FRAMER SEO AUDIT · VISUAL WEBSITE BUILDER · REACT OUTPUT · EDGE HOSTING

Free Framer SEO Audit

Framer is a visual website builder generating React-based sites hosted on edge infrastructure (Cloudflare-powered). SEO settings are configured via Framer's SEO panel per page and project-level custom code for JSON-LD. CMS collections generate dynamic pages with auto-sitemap inclusion. JSON-LD (Article, FAQPage, Organisation) requires custom code injection — via the per-page custom code panel, site-level code, or React Code Components for dynamic CMS field binding. DeepSEOAnalysis audits the rendered HTML — validating SEO panel output, detecting JSON-LD rendering gaps from GTM-injected schema, real CrUX Core Web Vitals for Framer Motion-heavy sites, sitemap coverage of CMS collections, and all five AI visibility signals — free with no signup.

Audit my Framer site →How we score

WHAT WE CHECK

6 Framer-specific SEO checks

Framer SEO auditing covers the SEO panel meta tag output (title, description, canonical, OG image, noindex toggle) and custom robots.txt additions, Framer CMS slug configuration and sitemap inclusion for collection items, JSON-LD injected via custom code panel or Code Components (with rendering gap detection for GTM-injected schema), auto-generated sitemap coverage with noindex exclusion, real CrUX Core Web Vitals for Framer Motion animation overhead and edge CDN performance, and AI visibility including llms.txt options for Framer-hosted domains.

🔧

Framer SEO panel settings and meta tag output

Framer\'s SEO panel (Page Settings → SEO) is the primary interface for configuring per-page meta tags. The audit validates the rendered HTML output. Key checks: title tag quality (the Framer SEO panel\'s Title field maps to `title` — if left empty, Framer uses the page name, which may not be search-optimised; all pages using default page-name titles without explicit SEO titles are flagged); meta description coverage (the Description field in the SEO panel maps to `meta name="description"`; empty descriptions are flagged as missing); canonical tag configuration (Framer sets canonicals based on the published URL; the audit checks that self-referential canonicals are correct and that custom canonicals set in the SEO panel point to the right URLs); OG image (Framer\'s SEO panel allows setting a social image per page — stored as a Framer-hosted URL and rendered as `og:image`; missing OG images are flagged; the audit checks the image is accessible and meets minimum dimensions for social card display); noindex consistency (the noindex toggle in Page Settings must correlate with sitemap exclusion — pages with noindex enabled must be absent from the `/sitemap.xml`; the audit checks this consistency); robots.txt quality (Framer generates a default robots.txt — custom additions in Project Settings → SEO → robots.txt override the default; the audit checks for correct AI crawler allowance, sitemap declaration, and absence of accidental broad Disallow rules); and custom code JSON-LD presence (the audit detects JSON-LD injected via Framer\'s custom code panel and validates its schema against Google\'s Rich Results requirements — flagging missing Article, Organisation, or FAQPage JSON-LD on pages that need it).

🔗

Framer CMS URL routing and collection slug configuration

Framer CMS (available on paid plans) allows creating content collections (blog posts, team members, products, case studies) published at dynamic URLs based on the item slug. The audit checks: CMS slug quality (Framer auto-generates slugs from the item title in the CMS editor — long titles produce long slugs; slugs with stop words or redundant terms are flagged; the slug is configurable in the CMS item settings and should be edited before publishing for keyword-relevant, concise URLs); CMS sitemap inclusion (Framer auto-includes CMS collection items in `/sitemap.xml` — the audit verifies this is functioning and that all published CMS items appear in the sitemap); CMS page templates and SEO field mapping (Framer CMS allows adding CMS fields to the SEO panel — the Title and Description in the SEO panel can reference CMS fields like `{Item.seoTitle}` or `{Item.title}`; the audit checks whether CMS page titles and descriptions are dynamically populated from the CMS or are static placeholders identical across all CMS items); redirect configuration after slug change (if a CMS item slug is changed after publishing — e.g., from `blog/my-post-title-v1` to `blog/my-post-title-seo-optimised` — the old URL becomes a 404 without a configured redirect in Project Settings → Redirects; the audit checks for 404s on previously linked CMS URLs); and password-protected page handling (Framer\'s password-protected pages should have the noindex toggle enabled to prevent Google from indexing login-gated content; the audit checks consistency).

📋

JSON-LD structured data via custom code injection

Framer doesn\'t natively generate Article, FAQPage, HowTo, LocalBusiness, or breadcrumb JSON-LD — all structured data beyond basic meta tags requires custom code injection in Framer\'s custom code panel. The audit validates all JSON-LD found in the page HTML against Google\'s Rich Results specifications, whether injected via Framer\'s custom code panel, GTM, or Framer Code Components. For `Organisation` and `WebSite` JSON-LD (typically injected site-wide via Project Settings → Custom Code): `@type: Organization`, `name`, `url`, `logo.url` (absolute, hosted on Framer\'s CDN or custom domain), `sameAs` array with verified social profiles. For `Article` JSON-LD on Framer CMS blog pages: `headline` must be ≤110 characters; `datePublished` from the CMS publish date field (if the Framer Code Component approach is used, this can be dynamically populated from the CMS item); `dateModified` from the CMS last-modified field; `author` from the CMS author field or a static organisation fallback; `image` as an absolute URL. If Article JSON-LD is injected via Framer\'s per-page custom code panel (static approach), `headline`, `datePublished`, and `author` must be manually updated for each CMS item — the audit checks for JSON-LD that appears correct structurally but has placeholder or static values that don\'t match visible page content. For `FAQPage` JSON-LD: injected via per-page custom code on pages with FAQ content — the audit validates `mainEntity` array structure, `acceptedAnswer.text` content, and consistency with visible FAQ content. JavaScript rendering gap detection: JSON-LD injected via GTM or client-side JavaScript may be absent from the initial HTML response — the audit detects this gap (structured data in the rendered DOM but absent from initial HTML) and flags it as a rendering gap risk.

🗺️

Framer auto-generated sitemap and crawl configuration

Framer automatically generates a sitemap at `/sitemap.xml` covering all published pages and CMS collection items. The audit checks: sitemap accessibility (`/sitemap.xml` returns valid XML); page coverage (all published non-noindex pages appear in the sitemap — the audit crawls the site and compares discovered pages to sitemap entries, flagging pages absent from the sitemap); CMS collection coverage (all published CMS items should appear in the sitemap — if a CMS collection has many items, paginated sitemap generation or a sitemap index may be needed for large collections); noindex exclusion (pages with the noindex toggle enabled in Framer must be excluded from the sitemap — the audit checks this is correctly implemented by Framer\'s sitemap generation); `lastmod` accuracy (Framer\'s sitemap includes `lastmod` based on page last-published timestamp — the audit checks `lastmod` dates are present and recent for recently updated pages); `priority` and `changefreq` (Framer\'s sitemap may or may not include these optional fields — absence is acceptable; if present, values are checked for reasonableness); redirect configuration (Framer\'s redirect rules in Project Settings → Redirects should ensure old page URLs redirect to current URLs; the audit checks for 404 responses on previously published URLs that indicate missing redirect rules after page renaming or restructuring); and robots.txt (the custom code addition in Project Settings must include `User-agent: *`, proper Disallow rules for any non-public pages, and `Sitemap: https://yourdomain.com/sitemap.xml` declaration).

Core Web Vitals for Framer edge-hosted sites

Framer\'s edge infrastructure (Cloudflare-powered) provides a strong performance baseline, but Framer\'s visual capabilities (Framer Motion animations, complex interactions, third-party embed support) create performance risks not present in simpler static sites. The audit uses real CrUX field data. **TTFB** — Framer serves from Cloudflare\'s global edge network; expect sub-100ms TTFB for most users. If TTFB is elevated, the likely cause is a CMS page requiring a server-side render on first load before caching. **LCP** — the primary LCP element is usually the hero image or a large above-the-fold design element. Framer auto-optimises uploaded images to WebP, but images added via external URL (Unsplash embeds, external CDN references) may not be pre-optimised. The hero image should be uploaded to Framer\'s asset system for auto-optimisation. Ensure the hero image\'s intrinsic dimensions match the rendered dimensions to prevent LCP delay from image resizing. **CLS** — the most common CLS sources on Framer sites: (a) images without explicit dimensions in the Framer editor (add width+height constraints in the design layer); (b) embedded web fonts that cause text reflow on load (use `font-display: swap` in custom CSS or self-host fonts via Framer\'s asset system); (c) Framer Motion elements that change size during entrance animations (use `layout` prop carefully); (d) custom code embeds (forms, chat widgets, video players) that load asynchronously and push down surrounding content. **INP** — Framer Motion scroll-triggered animations and complex hover interactions execute on the main thread; sites with many animated elements can have INP issues on mid-tier mobile devices. Audit the number of active Framer Motion animations and reduce or defer non-critical ones.

🧠

AI visibility for Framer sites

Framer sites are often used for SaaS landing pages, portfolios, agency sites, and content platforms — categories that benefit significantly from AI visibility. The audit checks all five GEO signals. For `llms.txt`: Framer has no native llms.txt generation. Add llms.txt via Framer\'s custom code as a static HTML page accessible at `/llms.txt` — create a new blank page in Framer named "llms.txt" with custom code outputting the llms.txt content as preformatted text. Alternatively, if using a reverse proxy (Cloudflare Worker, Vercel, or edge function in front of Framer), serve a static llms.txt at the domain level. For `robots.txt`: Framer\'s Project Settings → SEO → Custom robots.txt addition allows specifying custom content appended to the default robots.txt. Ensure GPTBot, ClaudeBot, PerplexityBot, Google-Extended, and CCBot are not in any Disallow block. The audit checks the live `/robots.txt` response for AI crawler blocking. For `FAQPage` JSON-LD: must be manually injected via Framer\'s per-page custom code panel (Page Settings → Custom Code) or via a Framer Code Component — the audit checks whether FAQ-style pages have FAQPage JSON-LD present in the server-rendered HTML (not injected via GTM, which creates a rendering gap). For question-heading ratio: Framer\'s visual editor renders headings as semantic `<h2>`/`<h3>` elements in the published HTML — the audit checks whether ≥20% of headings on content-heavy pages are question-format for AI Overview citation eligibility. For content chunkability: Framer pages structured with clear section components and heading hierarchy produce naturally chunkable content; the audit measures average section length in the rendered HTML against the ≤400-word target.

HOW IT WORKS

Audit your Framer site in 60 seconds

  1. Enter your Framer URL. Use your custom domain connected to Framer or your framer.app subdomain. No Framer account access, API key, CMS credentials, or project editor access needed. Works with all Framer plans — free tier (framer.app subdomains) and paid plans (custom domains). Works whether your Framer site uses CMS collections, static pages only, or a combination.
  2. We crawl and analyse. The engine validates meta tags from Framer's SEO panel against quality standards; checks all JSON-LD found in the HTML — including detecting rendering gaps where schema is injected via GTM or client-side JavaScript rather than the initial HTML response (Googlebot sees the initial HTML on first-pass crawl); verifies the Framer auto-generated sitemap covers all published pages and CMS items with correct noindex exclusion; measures CrUX Core Web Vitals from real Chrome field data including Framer Motion animation overhead on INP; and evaluates all five AI visibility signals.
  3. You get a prioritised report. Framer-specific issues first — SEO panel description fields empty across CMS collection pages, Article JSON-LD absent from blog CMS pages, Organisation JSON-LD missing from site-level custom code, JSON-LD detected in rendered DOM but absent from initial HTML (GTM rendering gap), CMS slug containing stop words or exceeding 70 characters, FAQPage JSON-LD missing on FAQ sections — then general SEO findings, each with the specific Framer UI location (Page Settings → SEO, Project Settings → Custom Code, CMS field configuration) for the fix.

FAQ

Questions about the Framer SEO audit

Does Framer have good SEO features?

Framer (framer.com) is a visual website builder that outputs React-based websites hosted on Framer\'s global edge infrastructure (powered by Cloudflare). It has a growing set of native SEO features alongside gaps that require custom code workarounds. Native Framer SEO capabilities: (1) **SEO settings panel per page** — each page in Framer has an SEO panel (accessible via Page Settings → SEO) with fields for title, description, and OG image. These map directly to `title`, `meta name="description"`, and `og:image` in the published page HTML. (2) **Canonical URLs** — Framer automatically sets canonical tags based on the page\'s published URL and custom domain. Custom canonical URLs are supported via the SEO panel. (3) **noindex toggle** — a noindex toggle in the Page Settings allows marking individual pages as non-indexable. Useful for staging pages, thank-you pages, and password-protected pages. (4) **Sitemap.xml** — Framer auto-generates a sitemap at `/sitemap.xml` covering all published pages. CMS collection items are included in the sitemap with their published URLs. (5) **robots.txt** — Framer generates a default `robots.txt` pointing to the sitemap. Custom `robots.txt` content can be added via the Project Settings → SEO section. (6) **301 redirects** — Framer supports defining URL redirects in Project Settings, allowing old URL paths to redirect to new ones after site restructuring. (7) **Custom code injection** — Framer\'s custom code feature (available on paid plans) allows injecting HTML/JavaScript into the `head` or before `</body>` at the site level or per page — used to add JSON-LD structured data, hreflang tags, Google Tag Manager, and other SEO-relevant code that isn\'t natively supported. (8) **CMS for dynamic content** — Framer CMS allows creating content collections (blog posts, team members, case studies) with structured fields, published at dynamic URLs like `/blog/[slug]`. CMS items appear in the auto-generated sitemap. Limitations: no native FAQPage JSON-LD generation (requires custom code), no native Article JSON-LD for blog posts (requires custom code), no native breadcrumb schema, and no built-in hreflang support for international sites.

How do I add JSON-LD structured data to a Framer site?

Framer doesn\'t natively generate JSON-LD structured data (Article, FAQPage, HowTo, LocalBusiness, etc.) — this must be added via custom code injection. Three approaches: (1) **Site-level custom code (for all pages)** — add an `script type="application/ld+json"` block in Framer\'s Project Settings → Custom Code → `head` section. Use this for Organisation JSON-LD and WebSite JSON-LD that applies to every page. Example: `script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Your Brand","url":"https://example.com","logo":"https://example.com/logo.png","sameAs":["https://linkedin.com/company/yourbrand","https://twitter.com/yourbrand"]}</script`. (2) **Per-page custom code** — Framer allows custom code at the individual page level (Page Settings → Custom Code → `head`). Use this for Article JSON-LD on blog CMS pages, FAQPage JSON-LD on FAQ pages, or LocalBusiness JSON-LD on a Contact or About page. The limitation: for CMS pages (dynamic blog posts), you can inject a static JSON-LD template but cannot dynamically reference the CMS item\'s fields (title, date, author, image) — the values must be hard-coded or managed manually per item. (3) **Framer Code Components (advanced)** — Framer supports React code components. A developer can write a React component that accepts props matching CMS field values and renders a JSON-LD `script` tag. This component is embedded in the CMS page template and automatically receives the CMS item\'s data — enabling dynamic, per-item Article JSON-LD with the correct `headline`, `datePublished`, `dateModified`, `author`, and `image` values populated from the CMS fields. This is the most correct approach for dynamic CMS content but requires React development skills. (4) **Google Tag Manager (GTM) approach** — inject GTM via custom code, then manage JSON-LD injection via GTM custom HTML tags with variable lookups — but JSON-LD injected via GTM may be in the rendered DOM without being in the initial HTML response, creating a JavaScript rendering gap for Googlebot\'s first-pass crawl.

How does Framer\'s hosting affect Core Web Vitals?

Framer-hosted sites run on Framer\'s edge infrastructure, which is built on Cloudflare\'s global network. This gives Framer-hosted sites significant structural performance advantages: (1) **TTFB** — Framer serves pages from Cloudflare edge nodes globally, targeting sub-100ms TTFB for most geographic locations. Static pages (non-CMS) are served directly from the edge as static HTML. CMS pages may involve an edge-side render for the first request before being cached at the edge. (2) **LCP** — the primary LCP element on Framer sites is typically a hero image set in the visual editor. Framer auto-optimises images uploaded to its asset system (converting to WebP, sizing appropriately), but images must have defined dimensions to prevent CLS. Images set in Framer\'s visual editor with explicit width/height in the design tool will render with correct dimensions. External images added via URL may lack dimension information and cause CLS. (3) **CLS** — Framer\'s React-based output is hydrated on the client after the initial server render. If the client-side hydration changes the layout (e.g., a dynamic element takes different dimensions than the server-rendered placeholder), CLS can occur. Custom code components that load asynchronously (fonts from external CDNs, embeds, dynamic content blocks) are the primary CLS risk. (4) **INP** — Framer sites with complex animations (Framer Motion is used extensively for visual effects) and third-party scripts can have INP issues. The Framer visual editor\'s animation features use Framer Motion (React animation library) — scroll-triggered animations, hover effects, and complex transitions all contribute to main thread work that affects INP. (5) **Real CrUX data** — DeepSEOAnalysis uses real Chrome User Experience Report field data for all Core Web Vitals assessments — not Lighthouse lab scores. CrUX data reflects actual user experience on the live Framer site, including Framer\'s CDN performance and the JavaScript execution cost of Framer Motion animations.

Is the Framer SEO audit free?

Yes. The complete audit is free with no signup and no email gate. Enter the URL of your Framer-hosted site or custom domain connected to Framer — the audit crawls the server-rendered HTML as Googlebot would. No Framer account access, no CMS API key, no project credentials needed. Works with all Framer plans including the free tier (with framer.app subdomains) and paid plans with custom domains. Paid DeepSEOAnalysis plans add saved report history, scheduled monitoring for ongoing Framer site health tracking, and white-label agency reporting.