Webflow
Available · Tier 1Designers’ favourite. Webflow’s Collection model means we never touch your templates — we just write into the same fields your blog template already reads. We provision missing fields on connect, map every CanonicalPost property, and publish into your CMS without breaking design fidelity.
How it works
Webflow stores blog posts as items in a CMS Collection. Each Collection has a fixed schema you set up in the Designer. SEORAV reads your existing schema on connect, identifies which CanonicalPost fields map to which Collection fields, and creates any missing ones automatically (with safe defaults you can tweak later in the Designer).
On publish we POST to /v2/collections/{id}/items with isDraft: false. The item appears immediately, lives at the URL your existing template defines (/blog/[slug] in most cases), and renders with whatever your Designer template specifies — we never touch the template itself.
What we support
| Feature | Supported | Notes |
|---|---|---|
| Publish + update + unpublish | Yes | Full CRUD via Webflow CMS Items API v2. |
| Native scheduling | Yes | Webflow Site Plan required for the “publish at” field; otherwise we keep the post as draft until the scheduled time, then flip. |
| Draft mode | Yes | isDraft: true. Review in Webflow Editor before flipping to published. |
| Auto field provisioning | Yes | Missing meta-title, meta-description, canonical-url, jsonld-blocks fields are created on first connect. |
| Featured image upload | Yes | Image URL passed directly; Webflow ingests + re-hosts on its CDN. |
| Categories & tags | Yes | Multi-reference field for tags; single-reference for category. Auto-created if missing. |
| JSON-LD in <head> | Yes | Two paths — site-wide custom code template (cleanest) OR per-post field rendered via Designer. |
| Meta + OpenGraph | Yes | Native Webflow SEO fields where present; we fall back to custom fields if your Collection doesn't have them. |
| Author mapping | Partial | If your Collection has an Author multi-reference field, we resolve by name. Create the author manually first. |
| Multiple Collections | Yes | Pick the target Collection per connection — connect twice if you publish to multiple Collections. |
| Articles + FAQ pages | Yes | Publishes not only blog articles but also FAQ / answer-engine pages. One connection per content type — point each at the appropriate Collection (Blog Posts for articles, FAQs for answer pages). |
Setup
- 1
Generate a Site API Token
In Webflow: Site Settings → Apps & Integrations → API access → Generate API token. Give it a name like
SEORAVand grant the following scopes:- CMS — read + write. Required. Creates, updates, and unpublishes collection items (your blog posts) and uploads hero images as assets.
- Sites — read + write. Theread part is required for connect-time validation. The write part is what lets us trigger a site republish after each post so your changes appear on your custom domain immediately. Without Sites → write, posts still land on your
*.webflow.iosubdomain; you’ll just need to hit “Publish” in Webflow manually to push them to your custom domain. - Pages — read + write. Required. Lets us discover where in your site the blog template lives so we can verify post URLs after publish.
- Authorized user — read. Required. Identifies the token owner for activity-log attribution.
- Custom code — read + write. Optional. When granted, we inject site-level JSON-LD into the
<head>for richer AEO signals. Without it, we fall back to per-post JSON-LD in a collection field (still valid, just slightly less powerful for cross-page schema).
The Site API token is scoped to a single Webflow site. If you have multiple sites, each gets its own token + its own SEORAV connection.We can’t safely probesites:writeat connect time — Webflow has no read-only endpoint that requires it — so the connect healthcheck shows a warning if it’s unticked. Re-generate the token with the scope checked to clear the warning. - 2
Identify your blog Collection
Note the Collection slug for your blog posts (
blog-posts,articles, whatever you named it in the Designer). You can find it in CMS → [your collection] → Settings → Slug. You’ll paste it during connect. - 3
Connect inside SEORAV
Integrations → Connect → Webflow. Paste:
• Site ID — the 24-char hex from your site URL in Designer
• Collection slug — from step 2
• Site API token — from step 1 - 4
Probe runs the schema check + auto-provision
We list your Collection’s fields, compare against what we ship, and create any missing fields. Defaults:
meta-title· Plain text, 70 char limitmeta-description· Plain text, 160 char limitcanonical-url· Linkjsonld-blocks· Rich Text (we ship as raw HTML script tags)open-graph-title,open-graph-image· Plain text + Image
You can rename or restyle these in Designer afterwards — we look them up by slug, which Webflow keeps stable through renames.
- 5
Wire up your blog template (one-time)
Open your blog post template in Designer. For each new field we provisioned, bind a Designer element to display it:
- Inside
<head>: bindmeta-titleto the page Title,meta-descriptionto the description,canonical-urlto a Link element with rel=canonical. - Embed an HTML element bound to
jsonld-blocks— this renders the JSON-LD scripts. - Bind
open-graph-title+open-graph-imageon the page’s OG settings.
Publish your site once to apply the template change. From then on, every SEORAV publish flows through the bound elements — no further Designer work needed.
- Inside
What we send to Webflow
POST https://api.webflow.com/v2/collections/{collection_id}/items
Authorization: Bearer wf_•••••••••••
Content-Type: application/json
{
"items": [{
"fieldData": {
"name": "How to choose a reverse-osmosis system in 2026",
"slug": "how-to-choose-reverse-osmosis-system-2026",
"post-body": "<h2>What you actually need to know</h2><p>…</p>",
"post-summary": "Membrane stages, recovery rate, remineralisation — three specs that matter.",
"main-image": {
"url": "https://cdn.seorav.com/articles/9b1c5e0a/hero.webp",
"alt": "Three reverse-osmosis systems on a kitchen counter"
},
"meta-title": "Reverse osmosis · the 3 specs that matter (2026)",
"meta-description": "Membrane stages, recovery rate, remineralisation. Plain-English …",
"canonical-url": "https://yoursite.com/blog/how-to-choose-reverse-osmosis-system-2026",
"open-graph-title": "Reverse osmosis · the 3 specs that matter",
"open-graph-image": "https://cdn.seorav.com/articles/9b1c5e0a/hero.webp",
"tags": ["reverse osmosis", "water filtration", "buying guide"],
"jsonld-blocks": "<script type=\"application/ld+json\">…</script>\n<script type=\"application/ld+json\">…</script>",
"category": "67a1...",
"author": "67a3..."
}
}],
"isDraft": false
}A successful response
HTTP/1.1 200 OK
{
"items": [{
"id": "67c5fe...",
"lastPublished": "2026-04-27T08:00:00.000Z",
"lastUpdated": "2026-04-27T08:00:00.000Z",
"fieldData": { /* what we sent, echoed back */ }
}]
}Field mapping reference
Webflow uses kebab-case slugs for field names. Here’s how we map every CanonicalPost property:
| Property | Type | Description |
|---|---|---|
| title | string | Webflow name (the required Collection name field). |
| slug | string | Webflow slug (also required, drives the URL). |
| body_html | string | Webflow post-body Rich Text field. We sanitise before sending — no inline scripts, no on-event handlers. |
| excerpt | string | Webflow post-summary. Pre-existing field on most blog templates. |
| meta_title, meta_description | string | Webflow meta-title, meta-description. Auto-provisioned if missing. |
| canonical_url | url | Webflow canonical-url Link field. Auto-provisioned. |
| og_title, og_image | string | Webflow open-graph-title + open-graph-image. Auto-provisioned if missing. |
| jsonld_blocks | JSON[] | Joined into a single Rich Text field jsonld-blocks as raw <script type="application/ld+json"> tags. Bind to an Embed element in your template. |
| tags | string[] | Webflow Multi-Reference field tags. We resolve names to existing tag items, create missing ones. |
| categories[0] | string | Webflow Single-Reference category. Webflow templates usually have one primary category per post. |
| hero_image_url + alt | string | Webflow main-image. We pass URL + alt; Webflow downloads + re-hosts on its CDN. |
Publishing options
Auto-publish (default)
We POST with isDraft: false. The item appears in your CMS Collection and is reachable at the URL your template defines. Note: the item is created instantly, but Webflow only re-deploys the static site every time you click Publish in Designer — or when the API call sends the publish flag, which v2 does automatically.
Scheduled
SEORAV holds the post until the scheduled minute, then publishes. Webflow has its own scheduling on CMS Plusplans; we don’t use it because plan limits make it inconsistent across customers.
Draft
isDraft: true. The item appears in your CMS Collection with a “Staged” badge. Open it in Webflow Editor or the CMS panel to review, then publish manually.
Activity timeline · what you’ll see
- job_queuedidempotency_key=8b3c…
- adapter_requestPOST/v2/collections/{cid}/items
- adapter_response200486msitem_id=67c5fe…
- verify_startGET https://yoursite.com/blog/how-to-…
- verify_complete200321msscore 98/100 (everything passed)
- job_succeededall 17 checks passed; schema valid
After publishing — make it shine
Pre-publish your template once
The very first SEORAV publish to a freshly-provisioned Collection won’t render new fields until you’ve published the site from Designer. Click Publish once after connect — afterwards SEORAV auto-publishes on every post.
Verify schema in Designer preview
Designer preview shows static placeholders, not real data. After your first SEORAV publish, click the live URL and right-click → View source. Confirm two <script type="application/ld+json"> blocks are in <head>, not body.
Resize the hero image
Webflow auto-generates 5 responsive versions on upload. If your template uses fixed-size variants, the big one might be 2000px wide — fine, but check page weight. Use Webflow’s “set image variant” in Designer to clamp to 1200px.
Add the post to a featured collection
Webflow templates often have “Featured posts” sliders that filter by a boolean field. Toggle featured: true on cornerstone articles after they go live.
Connect Webflow Logic
If you’re on a paid plan, set up a Logic flow to ping IndexNow on every CMS Item create. We don’t auto-IndexNow for Webflow because it requires a site-level API key we don’t want to ask for.
Lock the slug
Webflow allows post slugs to be edited after publish — which breaks your URL and our verification. In Designer, go to the Collection’s slug field and set it to read-only after first save.
Troubleshooting
401 / 403 on connect
The token is scoped to a different site, or scopes are missing. Regenerate with Site, CMS, Authorized userall checked. Webflow tokens are site-scoped — you can’t connect site B with a token from site A.
Auto-provision fails
Webflow Free plans cap Collection fields at a low number. If you’re near the limit (30 for Basic, 60for CMS), our field creation will 422 with “field limit reached”. Either upgrade or remove an unused field manually before reconnecting.
Item published but URL 404s
Two cases. (1) You haven’t published the site since adding the Collection template — Designer changes are live only after you click Publish. (2) Your permalink template doesn’t include /{slug} — Webflow lets you configure URL patterns in Collection Settings, and a missing {slug} token means every post collides on the same path.
JSON-LD shows in body, not head
You bound jsonld-blocks to a Rich Text element in the body instead of an Embed in the head. Edit the template: delete the body binding, add an Embed element inside Page Settings → Inside head tag, bind it to jsonld-blocks.
429 rate-limited during a bulk publish
Webflow caps API requests at 60/min per token. We back off automatically with exponential delays, so your bulk job will recover — but it might take 10-15 minutes for 30 articles. If you need faster bulk import, contact us.
Security & best practices
- Generate a fresh token specifically for SEORAV — don’t reuse a token already used by another tool.
- Set the token expiry (Webflow lets you choose 30 days / 90 days / never). 90 days is a reasonable balance for production sites.
- Keep an eye on Webflow’s “API access log” — every SEORAV publish should show up there.
- If your Webflow plan changes (downgrades), some scopes may stop working. Re-run the SEORAV healthcheck after plan changes.