TL;DR — Quick answer
Framer is ahead of most vibe-coding tools for SEO, but it still ships with these gaps you need to close:
- No schema markup — must be added manually via custom code injection
- Default Framer subdomain as canonical — must switch to your custom domain
- Sitemap exists but needs manual submission to Google Search Console
- Per-page meta tags default to generic — every page needs unique tags
- Images often unoptimized — alt text missing, lazy load not always enabled
- Heading structure often visual not semantic — affects crawling and accessibility
- No AEO signals — FAQPage schema and direct-answer content must be added
All fixable inside Framer’s settings + one custom code injection. This guide shows exactly where.
Framer occupies an interesting position in the vibe-coding ecosystem. Unlike Bolt.new or Lovable — which generate React SPAs with serious crawlability problems — Framer uses server-side rendering and ships with a built-in SEO panel. On the surface, it looks like SEO is handled.
It is not.
Framer gives you the infrastructure but not the implementation. It generates a sitemap but doesn’t submit it. It supports meta tags but defaults to generic ones. It renders content server-side but has no schema system. It looks great in PageSpeed compared to a raw React SPA, but still scores 20–30 points below where Google rewards you.
I’ve audited dozens of Framer sites. The failures are consistent and predictable. This guide covers all of them.
Is Framer Good for SEO?
Framer is better than most vibe-coding tools for SEO. It uses server-side rendering (SSR), which means Googlebot receives real HTML instead of an empty JavaScript shell. This alone gives Framer a significant advantage over Bolt.new, Lovable, and Cursor-built React SPAs.
Framer also includes:
- Auto-generated sitemap at
yourdomain.com/sitemap.xml - Per-page SEO controls (title, meta description, OG tags)
- Custom code injection for schema and analytics
- Automatic HTTPS on custom domains
- Clean semantic HTML output (generally)
But “better than most” is not the same as “good.” Framer still ships with meaningful SEO gaps that, if left unaddressed, will significantly limit your rankings. Let’s fix them one by one.
Issue 1: The Canonical Domain Is Set to Your Framer Subdomain
What happens: When you first publish a Framer site, it lives at yourproject.framer.app. Even after you connect a custom domain, if you haven’t set the canonical domain correctly, Framer may be treating yourproject.framer.app as the primary URL — creating duplicate content between your custom domain and the Framer subdomain.
How to diagnose: View the page source of your homepage (right-click → View Page Source). Look for a <link rel="canonical"> tag. If it points to yourproject.framer.app instead of your custom domain, this is your problem.
How to fix it:
- In Framer, go to Site Settings → General → Domain
- Connect your custom domain if you haven’t already
- Under your custom domain, click Set as Primary
- Framer will now use your custom domain as the canonical in all pages
After setting the primary domain, Framer automatically 301-redirects traffic from the .framer.app subdomain to your custom domain. Verify this by visiting your .framer.app URL directly — it should redirect to your custom domain with a 301 status.
Time to fix: 5 minutes.
Issue 2: Sitemap Exists But Google Doesn’t Know About It
What happens: Framer auto-generates a sitemap at yourdomain.com/sitemap.xml. But generating a sitemap and submitting it to Google are two different steps. Without submission, Google discovers your pages through links alone — which for a new site with no inbound links, may take months.
How to diagnose: Visit yourdomain.com/sitemap.xml — if you see an XML file listing your pages, the sitemap exists. Then check Google Search Console → Sitemaps — if no sitemap appears, it hasn’t been submitted.
How to fix it:
- Go to Google Search Console (search.google.com/search-console)
- Add and verify your property if you haven’t already
- Navigate to Sitemaps in the left sidebar
- Enter
sitemap.xmlin the field and click Submit
Also check that your sitemap includes all the pages you want indexed. Framer excludes pages with the “noindex” toggle enabled — verify this is only on pages you genuinely want excluded (like thank-you pages or draft pages).
Bonus: Also submit to Bing Webmaster Tools (bing.com/webmasters). Many Perplexity citations draw from Bing’s index, so Bing indexation has direct AEO value.
Time to fix: 15 minutes.
Issue 3: Per-Page Meta Tags Are Generic or Empty
What happens: Framer’s SEO panel supports per-page meta tags, but many Framer users either don’t know about it or set it once at the site level and leave individual pages at their defaults. The result: multiple pages with identical or empty title tags and meta descriptions.
Google uses the title tag as a significant ranking signal. Identical titles across pages tell Google your site has no meaningful page differentiation. Empty descriptions get auto-generated by Google — and Google’s auto-generation is rarely as good as a deliberately written one.
How to diagnose: In Google Search Console, check the Pages report. Look for pages flagged as “Duplicate, Google chose different canonical than user” or pages with missing meta descriptions.
How to fix it, page by page:
In Framer, click on any page in the left panel → open Page Settings (the gear icon) → navigate to the SEO tab.
For each page, set:
Title tag — unique per page, includes primary keyword, under 60 characters:
- Homepage:
[Brand Name] — [What You Do in 6 Words] - About page:
About [Brand Name] — [One-line differentiator] - Blog post:
[Article Title] | [Brand Name] - Service page:
[Service Name] for [Audience] | [Brand Name]
Meta description — unique per page, 150–160 characters, includes primary keyword, ends with implicit or explicit CTA:
- Lead with the page’s core value proposition
- Include the primary keyword naturally (not forced)
- End with something that makes a user want to click: “Here’s how.”, “Learn the exact steps.”, “Free audit available.”
Open Graph image — set a custom 1200×630px OG image for each important page. Framer defaults to a screenshot of your site, which looks unprofessional in social shares and link previews.
Time to fix: 30–60 minutes depending on page count.
Issue 4: No Schema Markup — Zero Structured Data Signals
What happens: Schema markup is how you communicate your site’s meaning to search engines and AI systems in a machine-readable format. Without it, Google cannot generate rich results for your pages (FAQ dropdowns, review stars, how-to steps), and AI tools like Perplexity have no structured signal for entity recognition.
Framer has no built-in schema interface. You get zero schema by default.
How to fix it: Framer’s custom code injection lets you add JSON-LD schema to the <head> of every page globally, or to specific pages.
Step 1: Add global Organization schema
Go to Framer → Site Settings → General → Custom Code → Head (global)
Paste this, filling in your details:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Brand Name",
"url": "https://yourdomain.com",
"logo": "https://yourdomain.com/logo.png",
"description": "One clear sentence: what you do and who you serve.",
"email": "hello@yourdomain.com",
"knowsAbout": [
"Primary expertise topic",
"Secondary expertise topic",
"Specific niche topic"
],
"sameAs": [
"https://twitter.com/yourhandle",
"https://linkedin.com/company/yourcompany"
]
}
</script>
Step 2: Add page-specific schema
For individual pages, use Page Settings → Custom Code → Head:
For a services page, add a Service schema:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Your Service Name",
"provider": { "@type": "Organization", "name": "Your Brand" },
"description": "What this service includes and who it's for.",
"offers": {
"@type": "Offer",
"price": "497",
"priceCurrency": "USD"
}
}
</script>
For blog-style content pages, add Article schema. For FAQ sections, add FAQPage schema. See our complete JSON-LD schema guide for copy-paste templates for every schema type.
Time to fix: 2–3 hours.
Issue 5: Heading Structure Is Visual, Not Semantic
What happens: Framer is a design tool at heart. Its heading elements (H1, H2, H3) are chosen based on visual appearance rather than semantic meaning. Many Framer sites end up with:
- Multiple H1 tags on a single page
- No H2 or H3 hierarchy — just a series of H1s used for visual sizing
- Important sections marked as
<p>or<div>with custom font sizes instead of heading tags
Google uses heading hierarchy to understand content structure and identify the most important topics on a page. A broken heading structure confuses crawlers and reduces the accuracy of indexation.
How to diagnose: Install the free browser extension Detailed SEO Extension or use Chrome DevTools → Inspector. Look at the heading elements. A correct structure looks like:
H1: Main page title (one per page)
H2: Major section
H3: Subsection
H2: Another major section
H3: Subsection
How to fix it in Framer:
In Framer’s text element properties, the Tag dropdown lets you set the semantic HTML element independently of the visual style. This is the critical setting most Framer users miss.
For each text element:
- Click the text element
- In the right panel, find Tag under the HTML section
- Set it to the appropriate heading level (H1, H2, H3, P)
- Style it visually however you want — the semantic tag is separate from the visual appearance
Rules to follow:
- One H1 per page — contains the primary keyword
- H2 for major sections — each targeting a secondary keyword or question
- H3 for subsections within H2 sections
- Never use a heading tag purely for visual sizing — use a paragraph tag and adjust font size
Time to fix: 1–3 hours depending on site complexity.
Issue 6: Images Are Missing Alt Text and Lazy Loading
What happens: In Framer, images added to the canvas do not automatically receive alt text. Empty alt attributes hurt both SEO (images can’t rank in Google Images or contribute keyword context) and accessibility (screen readers announce “image” with no description).
Additionally, Framer does not always enable lazy loading by default for below-the-fold images, which contributes to slower LCP scores.
How to fix alt text in Framer:
Click any image element → In the right panel, find the Alt Text field → Write a descriptive alt text.
Alt text best practices:
- Describe what the image shows, not what it symbolizes
- Include your primary keyword naturally if it’s genuinely relevant to the image
- Keep it under 125 characters
- Don’t start with “image of” or “photo of” — Google knows it’s an image
- Leave it empty only for purely decorative images (dividers, backgrounds) — use
alt=""
How to enable lazy loading:
In Framer, select an image → Properties panel → Enable Lazy Load. Do this for all images that appear below the first screen fold.
For the hero image (first visible image on the page), do NOT lazy load it — it’s the LCP element and needs to load immediately.
Time to fix: 30–60 minutes.
Issue 7: Core Web Vitals Need Manual Optimization
What happens: Framer’s SSR means it starts ahead of React SPA tools on Core Web Vitals. A typical unoptimized Framer site scores 65–80 on mobile PageSpeed — better than the 25–55 of a raw Bolt.new or Lovable site, but still below the 90+ threshold where Google’s ranking benefit kicks in.
The main culprits on Framer sites:
Large images — Framer doesn’t compress uploaded images by default. A full-screen hero image uploaded at 3MB and 4000px wide dramatically hurts LCP.
Fix: Before uploading to Framer, compress every image at squoosh.app or use a tool like ImageOptim. Target: under 200KB per image, WebP format, sized to the maximum display size (not larger).
Unused JavaScript — Framer includes its own runtime JavaScript for animations, interactions, and the editor. Some of this loads even on published sites.
Fix: In Framer Site Settings, disable any interaction or animation features you’re not using. Framer has been improving this with each release — keeping Framer updated helps.
Render-blocking resources — Third-party scripts (chat widgets, analytics, marketing tools) loaded in the <head> block rendering.
Fix: Add the defer or async attribute to non-critical scripts. In Framer’s custom code injection, add scripts as:
<script src="your-script.js" defer></script>
And place non-critical third-party scripts in the Body End section of Framer’s custom code, not the Head.
Target scores:
- LCP: under 2.5 seconds (aim for under 1.5s)
- CLS: under 0.1 (aim for under 0.05)
- INP: under 200ms
After implementing these fixes, re-run PageSpeed Insights and verify improvement. Most Framer sites reach 85–95 on mobile after image optimization and script deferral.
Time to fix: 2–4 hours.
Issue 8: No robots.txt Customization for AI Crawlers
What happens: Framer manages robots.txt automatically and does not give you direct editing access to it by default. This means you cannot add AI crawler allowlists — the single most important AEO technical fix.
How to check your current robots.txt: Visit yourdomain.com/robots.txt. A typical Framer robots.txt looks like:
User-agent: *
Allow: /
Sitemap: https://yourdomain.com/sitemap.xml
This is acceptable but not optimal. It doesn’t explicitly allow AI crawlers, which increasingly look for specific permission signals.
The workaround: In Framer, you can override the robots.txt by creating a custom robots.txt file and serving it via a redirect. This requires a Framer CMS page or external hosting for the robots.txt file.
The simpler workaround: add a meta robots tag to your pages via custom code injection that explicitly signals to AI crawlers:
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
<meta name="googlebot" content="index, follow">
And separately, use Cloudflare (if you’re routing through it) to serve a custom robots.txt that includes AI crawler allowlists. This is the most robust solution and works regardless of your website builder.
Time to fix: 30–60 minutes (Cloudflare approach).
Issue 9: Internal Linking Is Often an Afterthought
What happens: Framer sites are typically designed as visual experiences — each section is crafted in isolation, and links between pages are limited to navigation menus and footer links. There’s little to no contextual internal linking within content.
Internal links are how Google understands the relationship between your pages and distributes ranking signals. A flat link structure — where every page links only from the nav — tells Google all pages are equal in importance.
How to fix it:
Within any text block in Framer, you can create hyperlinks using the standard link tool. Use these to create contextual links:
- Your homepage should link to your most important service and about pages with keyword-rich anchor text
- Your about page should link to relevant services
- Your blog posts should link to related articles and your service pages
- Create a “Related articles” or “Also relevant” section at the bottom of each page
Aim for 3–5 contextual internal links per important page. Use descriptive anchor text (the actual words that are hyperlinked) that describes the destination page’s topic — not “click here” or “learn more.”
Time to fix: 1–2 hours.
The Framer SEO Checklist — Complete Reference
Use this before every Framer site launch and after every major update:
Domain and indexation
- [ ] Custom domain connected and set as primary canonical
- [ ] Framer subdomain redirects 301 to custom domain
- [ ] Sitemap submitted to Google Search Console
- [ ] Sitemap submitted to Bing Webmaster Tools
- [ ] Google Analytics 4 connected via custom code injection
- [ ] GSC property verified and data flowing
Meta tags (every page)
- [ ] Unique title tag, under 60 characters, includes primary keyword
- [ ] Unique meta description, 150–160 characters, includes keyword
- [ ] Custom OG image set (1200×630px)
- [ ] No noindex toggle accidentally enabled
Schema
- [ ] Organization schema in global head injection
- [ ] FAQPage schema on pages with FAQ sections
- [ ] Article schema on blog/content pages
- [ ] Service schema on service/pricing pages
- [ ] BreadcrumbList schema on all pages
Technical
- [ ] One H1 per page
- [ ] Logical H1 → H2 → H3 hierarchy
- [ ] All images have descriptive alt text
- [ ] Below-fold images have lazy loading enabled
- [ ] Hero image does NOT have lazy loading
- [ ] All images compressed under 200KB, WebP preferred
- [ ] Non-critical scripts have defer/async attribute
- [ ] PageSpeed mobile score 85+
AI and AEO
- [ ] robots.txt allows major AI crawlers (via Cloudflare or meta tags)
- [ ] FAQPage schema implemented
- [ ] Direct-answer lead paragraphs on content pages
- [ ] H2 headings formatted as questions on content pages
Internal linking
- [ ] 3–5 contextual internal links per important page
- [ ] Descriptive anchor text (not “click here”)
- [ ] Related content links at bottom of each page
Framer SEO vs. Other Vibe-Coding Tools
Here is how Framer compares to other AI-built website platforms on SEO fundamentals:
| Feature | Framer | Bolt.new | Lovable | Webflow | Cursor |
|---|---|---|---|---|---|
| Server-side rendering | ✓ | ✗ | ✗ | ✓ | ✗ |
| Auto sitemap | ✓ | ✗ | ✗ | ✓ | ✗ |
| Per-page meta tags | ✓ | Manual | Manual | ✓ | Manual |
| Schema markup | Manual | Manual | Manual | Manual | Manual |
| PageSpeed (typical) | 65–80 | 25–55 | 30–60 | 70–85 | 20–50 |
| Custom code injection | ✓ | ✓ | Limited | ✓ | ✓ |
| robots.txt control | Limited | ✓ | Limited | ✓ | ✓ |
Framer is one of the better platforms for SEO out of the box, but it still requires manual work — particularly around schema markup, AI crawler permissions, and heading structure — that most Framer users never do.
If you’re comparing options for a new site, Webflow edges Framer on raw SEO control. If you’re already on Framer, the fixes above are entirely sufficient to compete.
Getting Your Framer Site to Rank
The fixes above address the structural and technical issues. Once those are in place, ranking requires content.
Framer is primarily a design tool, not a content management system. Its CMS can handle basic blog-style content, but it’s not optimized for the kind of pillar content strategy that drives sustainable organic traffic.
The most effective approach for Framer sites: use Framer for your marketing pages (homepage, about, services, contact) and route your blog through a subdirectory — either Framer CMS for simpler setups, or WordPress installed at /blog via a reverse proxy for more serious content operations.
This is exactly the architecture we recommend at VibeToRank: Framer’s visual quality for conversion pages, WordPress’s content infrastructure for SEO.
If you want a professional assessment of where your specific Framer site stands and a prioritized fix plan, our Quick SEO Audit covers every item in this guide and delivers a full report within 48 hours.
Frequently Asked Questions About Framer SEO
Is Framer good for SEO?
Framer is one of the better vibe-coding tools for SEO due to its server-side rendering and built-in SEO panel. However, it still requires manual setup for schema markup, AI crawler permissions, and proper heading structure. With the fixes in this guide, Framer sites can rank competitively.
Why is my Framer site not showing up on Google?
The most common causes are: sitemap not submitted to Google Search Console, the canonical domain set to the Framer subdomain instead of your custom domain, a noindex toggle accidentally enabled, or the site being too new (Google takes 1–4 weeks to index new domains).
Does Framer support schema markup?
Framer has no built-in schema interface but supports custom code injection in the head. Add JSON-LD schema manually via Site Settings → General → Custom Code → Head. Our complete schema guide has copy-paste templates for every schema type.
What is a typical Framer site PageSpeed score?
Most unoptimized Framer sites score 65–80 on mobile PageSpeed — better than React SPA tools but below the 90+ target. Image optimization, lazy loading, and deferred scripts typically bring Framer sites to 85–95.
How do I add a sitemap to my Framer site?
Framer generates a sitemap automatically at yourdomain.com/sitemap.xml. Submit it to Google Search Console under Sitemaps. You don’t need to create one manually.
Can I add Google Analytics to a Framer site?
Yes. Go to Framer → Site Settings → General → Custom Code → Head and paste your GA4 <script> tag. Alternatively, Framer has a native Google Analytics integration under Site Settings → Analytics.
Should I use Framer CMS or WordPress for my blog?
Framer CMS is suitable for simple blogs with infrequent publishing. For a serious content strategy targeting SEO traffic, WordPress installed at /blog is significantly more powerful — better schema support, more plugin options, and more flexible content structure.
