Webflow logo

Webflow

Available · Tier 1

Designers’ 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

FeatureSupportedNotes
Publish + update + unpublish YesFull CRUD via Webflow CMS Items API v2.
Native scheduling YesWebflow Site Plan required for the “publish at” field; otherwise we keep the post as draft until the scheduled time, then flip.
Draft mode YesisDraft: true. Review in Webflow Editor before flipping to published.
Auto field provisioning YesMissing meta-title, meta-description, canonical-url, jsonld-blocks fields are created on first connect.
Featured image upload YesImage URL passed directly; Webflow ingests + re-hosts on its CDN.
Categories & tags YesMulti-reference field for tags; single-reference for category. Auto-created if missing.
JSON-LD in <head> YesTwo paths — site-wide custom code template (cleanest) OR per-post field rendered via Designer.
Meta + OpenGraph YesNative Webflow SEO fields where present; we fall back to custom fields if your Collection doesn't have them.
Author mapping PartialIf your Collection has an Author multi-reference field, we resolve by name. Create the author manually first.
Multiple Collections YesPick the target Collection per connection — connect twice if you publish to multiple Collections.
Articles + FAQ pages YesPublishes 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).
One connection per content type
Webflow connections are scoped to a single content type. To publish both long-form articles AND FAQ / answer-engine pages, add two Webflow connections — one pointing at your Blog Posts Collection (articles), the other at your FAQs Collection (answer pages). The same Site API token works for both; only the Collection ID differs.

Setup

  1. 1

    Generate a Site API Token

    In Webflow: Site Settings → Apps & Integrations → API access → Generate API token. Give it a name like SEORAV and grant the following scopes:

    • CMSread + write. Required. Creates, updates, and unpublishes collection items (your blog posts) and uploads hero images as assets.
    • Sitesread + 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.
    • Pagesread + write. Required. Lets us discover where in your site the blog template lives so we can verify post URLs after publish.
    • Authorized userread. Required. Identifies the token owner for activity-log attribution.
    • Custom coderead + 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 probe sites: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. 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. 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. 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 limit
    • meta-description · Plain text, 160 char limit
    • canonical-url · Link
    • jsonld-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. 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>: bind meta-title to the page Title, meta-description to the description, canonical-url to 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-image on 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.

What we send to Webflow

http
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

json
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:

PropertyTypeDescription
titlestringWebflow name (the required Collection name field).
slugstringWebflow slug (also required, drives the URL).
body_htmlstringWebflow post-body Rich Text field. We sanitise before sending — no inline scripts, no on-event handlers.
excerptstringWebflow post-summary. Pre-existing field on most blog templates.
meta_title, meta_descriptionstringWebflow meta-title, meta-description. Auto-provisioned if missing.
canonical_urlurlWebflow canonical-url Link field. Auto-provisioned.
og_title, og_imagestringWebflow open-graph-title + open-graph-image. Auto-provisioned if missing.
jsonld_blocksJSON[]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.
tagsstring[]Webflow Multi-Reference field tags. We resolve names to existing tag items, create missing ones.
categories[0]stringWebflow Single-Reference category. Webflow templates usually have one primary category per post.
hero_image_url + altstringWebflow 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

Activity timeline · what shows up in your dashboard
  • 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

Storage
Site API tokens are encrypted with AES-256-GCM at rest. The plaintext is never logged. If a token leaks, revoke immediately at Webflow → Site Settings → API access → Revoke.

Useful links