Framer
Available · BetaAI-led onboarding for Framer-hosted sites. SEORav inspects your project's Collections, proposes a smart routing plan ('articles → /blog, FAQ → /resources'), and you confirm before saving. Every publish from then on is instant — your articles ship into the right Collection with no further setup.
How it works
Framer organises content in CMS Collections — your blog posts in one Collection, FAQ items in another, case studies in a third. Every Framer site is laid out a little differently, so SEORav doesn’t try to force a one-size template. Instead, our onboarding wizard inspects your project once, proposes a routing plan that maps each SEORav content type to the right Framer Collection, and lets you tweak it before saving.
Once saved, the plan drives every publish: when SEORav generates an article it consults the plan, picks the right Collection, and ships the post — title, body, hero image, SEO fields and all. No further AI is invoked at publish time, so publishing stays fast and deterministic. Re-run the wizard any time your Framer setup changes.
What we support
| Feature | Supported | Notes |
|---|---|---|
| Publish + update + unpublish | Yes | Full CRUD. Updates are idempotent — re-publishing the same article updates the existing item, never duplicates. |
| Smart routing setup | Yes | One-time AI analysis at onboarding decides which Collection is the blog, which is FAQ, which to ignore. Editable + re-runnable from the connection detail page. |
| Multiple Framer projects per site | Yes | Each Framer project has its own API key, so you can connect e.g. yourbrand.com + yourblog.com under one SEORav site. |
| Articles + FAQ pages | Yes | One Framer connection handles both. Articles route to your blog Collection; FAQ items route to your FAQs Collection. |
| Cluster-aware routing | Yes | Routing rules can match on topic cluster, template, or keyword. E.g. "Customer Stories cluster → /case-studies" while everything else falls to /blog. |
| Markdown body | Yes | Long-form content ships as markdown — Framer renders natively without any setup on your side. |
| External hero image URL | Yes | Pass an image URL and Framer ingests it on publish. Large or unusual files get re-uploaded automatically. |
| Native scheduling | — No | Scheduled publishes are held in SEORav's queue and fire at the scheduled time. You won't see a "scheduled" state inside Framer. |
| Per-item JSON-LD injection | Partial | A one-time site-wide template (we provide the snippet) renders structured data on every CMS page. Per-item JSON-LD via the API is on the roadmap. |
| Auto-deploy to production | Yes | Toggle during onboarding. Off by default — review the post in Framer before pushing live. On — push to production on every publish. |
| Multi-locale fan-out | — No | v1 supports your project's primary locale only. Locale fan-out is on the roadmap. |
Setup
- 1
Open your Framer project
Sign in at framer.com and open the project you want SEORav to publish into. Each Framer project gets its own SEORav connection — if you have multiple sites (e.g.
yourbrand.com+yourblog.com), you’ll run this wizard once per project. - 2
Generate the per-project API key
In Framer: click your avatar (top-right) → Site Settings → General → API Keys → Generate. Framer shows the key once — copy the full string.
Framer keys are per project. If you connect several Framer sites, each will need its own key.Server API access requires a paid Framer plan (Basic or higher). If your project is on Free, SEORav will surface an upgrade prompt automatically. - 3
Copy your project URL
Your browser address bar shows
https://framer.com/projects/<uuid>— copy the whole URL. SEORav uses it to identify the project on publish and to keep multiple Framer sites separate. - 4
Connect inside SEORav
In your dashboard: Publishing → Add an integration → Framer. Paste the project URL and the API key, then Analyze my Framer. The wizard verifies the key, inspects your Collections, and proposes a routing plan in 5–15 seconds.
- 5
Review the routing plan
You’ll see one row per Collection — what we think it should be used for, with a confidence badge. Override any row, pick your default article + FAQ destinations, optionally enable Auto-deploy to production, and click Save and connect.
From this point, every published article consults the saved plan instantly. No more setup needed.
The routing plan
Once you save the wizard, SEORav stores your plan and consults it on every publish. Rules are evaluated in order (first match wins); if nothing matches, the article goes to your default destination. The plan is editable from the connection detail page at any time:
// Your saved routing plan. Built once at onboarding, edited
// inline, used on every publish. No further AI calls until you
// click Re-analyze.
{
"overall_reasoning":
"Found 4 Collections — 2 article targets, 1 FAQ target, 1 unrelated.",
"collection_roles": [
{ "collection_id": "c-blog", "role": "article_target",
"reasoning": "Standard blog shape (title + body + SEO fields).",
"confidence": 0.95 },
{ "collection_id": "c-cases", "role": "article_target",
"reasoning": "Customer story pattern (customer field + long-form body).",
"confidence": 0.85 },
{ "collection_id": "c-faqs", "role": "faq_target",
"reasoning": "Question + Answer field pair.",
"confidence": 0.90 },
{ "collection_id": "c-team", "role": "unrelated",
"reasoning": "Team-member directory; not for publishing.",
"confidence": 0.99 }
],
"rules": [
{ "match": { "cluster_name": "Customer Stories" },
"target_collection_id": "c-cases",
"explanation": "Customer Stories cluster → /case-studies." }
],
"default_article_collection_id": "c-blog",
"default_faq_collection_id": "c-faqs"
}Supported match keys
| Property | Type | Description |
|---|---|---|
| entity_type | string | Routes by content type — "article" or "answer_page" (FAQ pages). |
| cluster_name | string | Routes by topic cluster — e.g. "Customer Stories" → a dedicated case-studies Collection. |
| cluster_in | string[] | Same as cluster_name but matches against a list of clusters. |
| keyword_contains | string | Routes by keyword substring — e.g. articles whose keyword contains "review" go to a Reviews Collection. |
| template_pattern | string | Routes by article template — e.g. "howto_tutorial" → /guides, "glossary_card" → /glossary. |
Conditions inside a single rule are AND-ed. An empty match object is a catch-all — useful as a final rule before falling through to the entity defaults.
Re-analyze when your Framer setup changes
If you add a Collection in Framer, rename fields, or build out a new content type, the saved routing plan can go stale. From the connection detail page click Re-analyze — the same modal opens, SEORav uses your stored credentials (you never re-paste your API key), inspects the current Framer layout, and proposes an updated plan. Confirm and save to replace the previous version.
Security
Your Framer API key is encrypted at rest with AES-256-GCM — the same standard used by online banking. The key never leaves the SEORav server after you paste it; even when you click Re-analyze, your browser only sends the connection ID, not the key itself. You can revoke the connection from your dashboard at any time; SEORav stops publishing immediately.
Known limits
| Property | Type | Description |
|---|---|---|
| Free Framer plans | unsupported | Server API access requires Basic or higher. SEORav surfaces this on connect. |
| Native scheduling | unsupported | Framer's API doesn't accept future publish dates. SEORav holds scheduled posts in its own queue and fires at T-0. |
| Bulk publish | throttled | SEORav paces bulk pushes at 1 article / second so we don't trip rate limits on Framer's side. |
| Webhook callbacks | not available | Framer doesn't emit webhooks for CMS item changes today. SEORav's healthcheck cron picks up any token revocation within 24h. |