SEO for Webflow

Webflow CMS On-Page SEO: Making Dynamic Templates Rank

Collection pages share one template across thousands of items. Here's how to make each one feel hand-tuned for SEO.

Published May 24, 20268 min readBy RankCrab Team

Webflow CMS is powerful and the SEO implications are easy to get wrong. You build one template. That template generates every page in your collection — every blog post, every product, every case study. If the template is optimized, every page is optimized. If it's missing something, every page is missing it.

This guide covers the CMS SEO patterns that matter: field-token binding for meta tags, handling reference fields for richer pages, avoiding duplicate content from filter URLs, and adding structured data per item.

How Field Tokens Work

Webflow's CMS field tokens let you pull collection item data into any text field in the Designer — including the SEO title, meta description, and Custom Code sections. The syntax looks like this in Webflow's UI: you click the purple "plus" icon next to a field and select a CMS field. Under the hood, Webflow renders a token like:

{{wf{"path":"name","type":"PlainText"}}}

You don't write this syntax by hand in the Designer — Webflow generates it when you select a field. But when you're writing Custom Code (HTML embeds, <head> code), you do write it manually. Understanding the token format is essential for CMS SEO.

PlainText fields render as escaped text, safe for HTML attributes. RichText fields render as full HTML markup — don't use these inside content="" attributes. ImageRef fields render as the CDN URL of the image.

Setting Up Your CMS Collection for SEO

Before you touch the template, check your collection fields. A well-designed collection has dedicated fields for SEO, not just content.

Minimum fields for a blog collection:

FieldTypePurpose
NamePlain TextAuto-used as the page title base
SlugTextURL path
SEO TitlePlain TextCustom meta title if different from Name
SEO DescriptionPlain TextMeta description, 155 char limit
Main ImageImageHero image + og:image
Image Alt TextPlain TextAlt attribute for main image
ExcerptPlain TextShort summary, used in OG description

If your collection only has Name and a rich text Body field, you're generating meta descriptions from nothing. Webflow will either use the page name or leave the description empty. Add a dedicated SEO Description field and make it required.

Binding Meta Title and Description

In the Designer, open your collection template. Go to Page Settings (the gear icon while viewing a CMS page). Under the SEO tab:

Title field: Click the purple field picker. Select your "SEO Title" field. Then append static text for your site name:

{SEO Title} | YourSiteName

If you want a fallback when the SEO Title field is empty, use the Name field as the primary and handle the case in your content workflow — Webflow doesn't have conditional field logic in title tags.

Description field: Click the field picker. Select your "SEO Description" field. The character counter in Webflow shows you the template character count, not the final rendered length — the actual length depends on how long the field content is for each item.

Free tool
Meta tag + SERP previewer
See exactly how your title and meta description will render in Google.
Try it

Adding OG Tags via CMS Field Tokens

Since Webflow's SEO tab only covers title and description, OG tags go in Page Settings → Custom Code → Inside <head>. For a CMS template, you write the field tokens manually here.

A complete OG block for a blog collection:

<meta property="og:title" content="{{wf{&quot;path&quot;:&quot;seo-title&quot;,&quot;type&quot;:&quot;PlainText&quot;}}}">
<meta property="og:description" content="{{wf{&quot;path&quot;:&quot;seo-description&quot;,&quot;type&quot;:&quot;PlainText&quot;}}}">
<meta property="og:image" content="{{wf{&quot;path&quot;:&quot;main-image&quot;,&quot;type&quot;:&quot;ImageRef&quot;}}}">
<meta property="og:type" content="article">
<meta property="og:url" content="{{wf{&quot;path&quot;:&quot;slug&quot;,&quot;type&quot;:&quot;PlainText&quot;}}}">

Finding your actual field token paths: The cleanest way is to add a field to a text element on the page (the Designer shows you the token when you do), then copy the path from there. Field paths are usually the slug version of the field name — "SEO Title" becomes seo-title, "Main Image" becomes main-image.

Using Reference Fields for Author Pages

If your blog has multiple authors, you should use a Reference field pointing to an Authors collection, not a plain text field. This lets you:

  1. Link each post to a full author page with a bio, image, and links
  2. Include the author's name and page URL in your JSON-LD structured data
  3. Create author archive pages (a separate Authors collection template)

In structured data (added via Custom Code), a reference field path uses dot notation:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "{{wf{&quot;path&quot;:&quot;name&quot;,&quot;type&quot;:&quot;PlainText&quot;}}}",
  "author": {
    "@type": "Person",
    "name": "{{wf{&quot;path&quot;:&quot;author.name&quot;,&quot;type&quot;:&quot;PlainText&quot;}}}"
  },
  "datePublished": "{{wf{&quot;path&quot;:&quot;published-on&quot;,&quot;type&quot;:&quot;PlainText&quot;}}}",
  "image": "{{wf{&quot;path&quot;:&quot;main-image&quot;,&quot;type&quot;:&quot;ImageRef&quot;}}}"
}
</script>

For the full CMS schema implementation including validating field token output, see how to add schema markup to Webflow CMS collection pages.

Avoiding Duplicate Content from Filter URLs

Webflow CMS supports filtering and pagination. This creates URL variants like:

/blog                     ← root collection page
/blog?category=tutorials  ← filtered view
/blog/page/2              ← paginated view

Each of these can potentially be indexed as separate pages with similar or identical content. Google is generally smart about this, but you should be explicit.

For filter URLs: Webflow's filter parameters (?category=) are typically treated as query strings. Google usually understands these aren't separate pages, but you can add a canonical tag pointing to /blog on the collection page to be explicit.

For pagination: Webflow generates /blog/page/2 style pagination URLs. These are real pages with real URLs. If your paginated pages have thin content (mostly just a list of post titles), consider whether they need to be indexed at all. You can noindex them via Page Settings → SEO → Exclude from search results — though this is set at the collection level, not per-pagination page, so it applies to all items.

Handling Multi-Reference Fields in SEO

Multi-reference fields (tags, categories that allow multiple values) don't render in field tokens the way single-reference fields do. You can't pull a list of category names into a meta description token.

For SEO purposes, the most common pattern is:

  • Use a single-reference field for the "primary category" that appears in meta tags
  • Use multi-reference for display (tag lists on the page) but not for meta content

If you need category names in structured data, you'll need to either limit to a single-value field or handle this server-side with Webflow's API — the CMS field token system doesn't support iteration.

Checklist for a New CMS Collection

Before launching a CMS-driven section of your Webflow site:

  • Collection has dedicated SEO Title and SEO Description fields (required)
  • Meta title in Page Settings is bound to SEO Title field
  • Meta description in Page Settings is bound to SEO Description field
  • OG tags added to Page Settings Custom Code with field token binding
  • Hero image has an Alt Text field bound to the image alt attribute
  • Author uses a Reference field (not plain text) if you have multiple authors
  • Schema markup added via Custom Code embed (BlogPosting or Article type)
  • Validate schema on a published item with Google's Rich Results Test
  • No filter or pagination URLs are generating indexable duplicate content

The SEO for Webflow hub covers the other areas — redirects, sitemap, images, and Core Web Vitals — that apply to both static and CMS pages.

Ship optimized content this afternoon.

7-day trial. $29 when it converts. Cancel from the dashboard the second it stops earning its keep.