---
title: "How to ship one h1, title, meta description and JSON-LD on Webflow"
slug: title-meta-schema-webflow
published: 2026-09-10T13:24:11.90151+00:00
updated: 2026-09-10T13:24:11.90151+00:00
author: "Asif Rahman"
author_url: https://masifrahman.com
category: "AI Readiness"
tags: check:C3, platform:webflow, Webflow, structured data, JSON-LD, meta description, technical SEO
description: "Webflow's Page settings now hold the title tag, meta description and JSON-LD. The h1 is a Designer element tag, and that is where check C3 usually fails."
url: https://aiscan.site/blog/title-meta-schema-webflow
---

Webflow's SEO panel now writes three of the four signals that AIScan's C3 check grades, and the fourth one is not in any panel. On a paid Site plan you can set a page's title tag, its meta description and its JSON-LD without writing code. The heading level is a property of an element you dragged onto the canvas, and that is where most Webflow pages lose the check.

## Quick summary

| C3 signal | Where it lives in Webflow | Who can set it | Time |
|---|---|---|---|
| `<title>` | **Pages panel > Page settings > SEO settings > Title tag** | Any role above Reviewer, paid Site plan or paid Workspace | 1 min per page |
| Meta description | Same panel, **Meta description** field | Same | 1 min per page |
| JSON-LD | **Page settings > Schema markup**, a first-class field since 2026 | Same | 2 min per page |
| Exactly one `<h1>` | Nowhere. It is the tag on a Designer element | Anyone editing the canvas | 5 min per template |

The first three are a form to fill in. The fourth is structural, so audit that one first.

## Webflow moved schema into the SEO panel and left the h1 on the canvas

C3 passes on one combination: exactly one `<h1>`, a `<title>`, a non-empty meta description, and JSON-LD present in the page. On Webflow the first three now have dedicated fields. Next.js hands JSON-LD back to the developer in writing, and on WordPress the heading is a theme-owned block attribute. Webflow closed the schema gap and kept the heading one.

It kept it deliberately. Webflow's accessibility article *Use descriptive, sequential headings*, in its own words, tells authors to *"use one H1 per page that describes its purpose (or only use multiple H1s when a page truly has more than one purpose)"*. That parenthesis is reasonable advice for a screen reader and a fail for C3, which counts.

Webflow's own pages show the split. Verified on 10 September 2026, fetched from both hosts with a browser user agent:

```
https://webflow.com/              1 title, 1 meta description, 1 JSON-LD block, 2 <h1>
https://university.webflow.com/   1 title, 1 meta description, 1 JSON-LD block, 1 <h1>
```

Two pages, one company, one platform. The panel-owned signals are correct on both. The heading count is not, and the marketing home page is the one that would fail. Two hosts is not a survey, but it is the shape of the problem.

## Set the title tag and meta description in Page settings

According to Webflow's help article *Add SEO title and meta description*, both fields live in one place: open the **Pages panel**, hover the page, click the **Settings** icon, and scroll to **SEO settings**.

1. Type a **Title tag**. Webflow's guidance is to keep it under 60 characters.
2. Type a **Meta description**. According to the same article, there is no character limit here, only that search engines truncate long ones. Aim for 150 to 160 characters so nothing important is cut.
3. Click **Save**, then **Publish** the site. Nothing in either field reaches a crawler before a publish.

Two constraints catch people. The panel is gated: any role except Reviewer can edit metadata, and the site needs a paid Site plan or a paid Workspace. And there is no site-wide fallback. Webflow states it plainly: *"You can't set SEO settings globally, and SEO settings apply only to the page on which you've set them."* A WordPress plugin will template a description for every post you never touched. Webflow leaves the field empty, and an empty meta description fails C3.

## Bind both fields to Collection fields on a CMS template

A Collection page fixes that. Set the pattern once on the template and every item inherits it.

1. Open the Collection page's **Page settings > SEO settings**.
2. Click **Add field** inside the Title tag box and pick the Collection field to insert, usually the item name.
3. Do the same in the Meta description box, using a summary or excerpt field.
4. **Save** and **Publish**.

One template then covers every item in that Collection, including the ones added next year.

## Put JSON-LD in the Schema markup field, not in custom code

Webflow now has a **Schema markup** section in the same Page settings panel, and it is the correct home for structured data:

1. **Pages panel > hover the page > Settings icon > Schema markup**.
2. Paste your JSON-LD, or click **Generate schema markup** to have Webflow AI build it from the page content.
3. Click **Save**, then publish to your custom domain or staging domain.
4. Validate the result with Schema Markup Validator, which Webflow's own article, *Add schema markup in Webflow to improve SEO and AEO*, recommends by name.

Placement is the reason to prefer this field. According to its own FAQ, schema added in the Schema markup field appears in the `<head>` of the published page, while schema pasted into the **Before `</body>` tag** custom code box appears at the end of the document. Both are read by parsers, but only one is where a validator, a scanner and most agents look first.

Do not use both routes on one page. Webflow's own FAQ advises keeping schema in one place to avoid duplicate structured data, and says existing custom-code schema keeps working, so there is no forced migration.

On a Collection page the field accepts dynamic bindings, with one limitation worth knowing early:

| Collection field type | Usable in Schema markup |
|---|---|
| Plain text, Number, Date/Time, Option, Switch | Yes |
| Image, Video link, Link, File, Color | Yes |
| Email, Phone | Yes |
| Reference, Multi-reference, Multi-image | No |

If your Product schema wants a brand stored as a Reference, that binding is unavailable and the value has to be a plain-text field instead. Custom code has room either way: Webflow documents 50,000 characters each for the head and pre-body boxes in both Site settings and Page settings.

## The heading level that no panel owns

There is no h1 setting anywhere in Webflow, because the h1 is the tag on an element. In the Designer, select the heading, open the settings on the element, and set the tag to **H1**. Three failures account for almost all of it:

| What the scan reports | What is actually on the canvas | The fix |
|---|---|---|
| `h1: 0` | The visual headline is a Text Block or a Div with large type. It looks like a headline and parses as a paragraph | Select it, set the element tag to **H1**, restyle if needed |
| `h1: 2` or more | A hero heading plus a second heading inside a Symbol or component reused in the navigation or footer | Retag the one in the component. Every page using it is fixed at once |
| One h1, same text everywhere | On a Collection page the H1 is static template text rather than a binding | Bind the H1 to the item's own name field |

## Confirm all four signals on the published page

Start with the scan. One request covers all four signals and names the one that broke:

```bash
npx aiscan-cli yoursite.com
```

Read the **C3** row. It reports the heading count, whether the title is present, whether the meta description is present, and whether JSON-LD was found. You can also paste the URL at [AIScan](https://aiscan.site/) and read the same row in the browser.

To check by hand instead, fetch the published page and count:

```bash
curl -s https://yoursite.com/your-page \
  | grep -o -E '<h1|<title>|name="description"|application/ld\+json' | sort | uniq -c
```

A passing page prints exactly one `<h1>`, one `<title>`, one `name="description"` and at least one `application/ld+json`. Two `<h1>` lines is the common failure. Run it against the published domain, never the Designer preview, because unpublished settings do not exist yet.

## Where AIScan fits, and where it doesn't

The check writes down what it found and stops. A JSON-LD block being present is all it confirms: the graph is never parsed, the `@type` you declared is never reported, and validity is never tested. Nor does a present meta description have to be unique or accurate. Pair the scan with Schema Markup Validator for that.

Our platform detector has a matching blind spot on this stack. Across the current scan corpus it classifies zero sites as Webflow, although every Webflow page ships `<meta content="Webflow" name="generator"/>` with the attributes in that order, which is a cheap fingerprint we have not wired in. It is logged as a product bug on our side, and it does not affect the C3 result on your page.

## If your content lives somewhere other than Webflow

Plenty of Webflow marketing sites keep the blog or the store elsewhere, and the scan grades whichever host answers the URL. For a WordPress blog, start with [ThinkRank](https://thinkrank.ai). Schema, robots meta, robots.txt and llms.txt are all handled by that one plugin, so you avoid the familiar mess of two or three SEO plugins fighting over a single file, and the migration path imports what you already set up in Rank Math, Yoast, AIOSEO or SEOPress. Yoast and Rank Math are both good at this and ship larger template libraries. On a Shopify storefront, [StoreSEO](https://storeseo.com/) handles product schema, llms.txt and agents.md from one app.

## Fix your Webflow pages in four passes

Count the h1 elements on your three most-visited templates first, since that is the signal Webflow leaves to you. Then fill the Title tag and Meta description fields on every static page, add the Collection-page bindings so new items inherit them, and paste or generate JSON-LD in the Schema markup field. Publish, then run `npx aiscan-cli` against the live domain and read the C3 row.

The same four signals are graded on every platform we cover, and the mechanism differs on each: compare the [WordPress route](https://aiscan.site/blog/title-meta-schema-wordpress), where the heading is owned by the theme, and the [Next.js route](https://aiscan.site/blog/title-meta-schema-nextjs), where JSON-LD has no framework field at all. For the rest of the Webflow rubric, [the full Webflow setup guide](https://aiscan.site/blog/ai-readiness-setup-webflow) covers files and rendering, and [the llms.txt guide](https://aiscan.site/blog/llms-txt-webflow) covers the upload route. What each check in the content dimension asserts is written up under [content checks](https://aiscan.site/docs/checks/content), and the whole library sits in [our guides index](https://aiscan.site/guides).
