SEO and AEO
|
This content was generated with the assistance of AI and should be verified against the official Webflow documentation before being relied on in production. This sub-section’s Webflow bibliography lists the reference material consulted while preparing these pages. |
This page describes how Webflow supports search visibility as it was on 2026-10-28, the date on which its facts were
checked against the official documentation. Webflow is a software-as-a-service product, so everything below is dated
rather than versioned, and the Product Changes and Deprecations
page tracks what has changed since. Plans are named by tier only (Starter, Basic, Premium, Team, Enterprise and the
Ecommerce tiers) and no prices are quoted; the Plans,
Workspaces, Seats and Roles page explains which tier unlocks what. Several of the features below are marked beta by
Webflow: the JSON-LD schema markup API, the llms.txt API and the AEO analytics API. A beta feature can change its
endpoints, limits or behaviour without a deprecation period, so treat the details as a snapshot.
The running example is Fernbrook Gardens, a fictitious botanical garden. By the end of this page its Plants collection pages have unique titles and descriptions built from CMS fields, its Events have structured data that search engines can turn into rich results, its sitemap leaves out the password-protected Volunteers area and the 404 page, and the marketing team can see which answer engines mention the garden when someone asks, "Which garden near me grows rare ferns?"
SEO and AEO in one picture
Search engine optimization (SEO) is the work of making pages easy for a search engine to crawl, understand and rank. Answer engine optimization (AEO) applies the same discipline to systems that answer a question directly instead of listing links: AI assistants and the AI summaries inside search results. The two share a foundation, because an answer engine can only cite what it can fetch and understand. Where they differ is the signal they weigh. A search engine ranks documents; an answer engine selects passages, names sources and sometimes names brands. That is why AEO leans on clear structure, direct answers, structured data and the ability of AI crawlers to read the site at all.
Webflow does not rank anything and does not guarantee any ranking. What it gives you is control over the technical inputs, which is what this page covers:
-
Per-page signals: the title tag, the meta description, Open Graph tags, the canonical URL, the indexing toggle, the heading structure and image alt text.
-
Site-wide signals: the sitemap,
robots.txt, the global canonical base URL, redirects, the default domain and hosting performance. -
Structured data: JSON-LD schema markup, written by hand in custom code or managed through the Designer and the beta Pages API.
-
Machine-readable guidance for AI systems: the
llms.txtfile and arbitrary well-known files. -
Measurement: the Audit panel, AI-assisted SEO and AEO audits, and AEO analytics.
The diagram shows why the controls interact. A URL that robots.txt blocks is never fetched, so a noindex tag on it
is never seen; a page that is fetched but marked as not indexable is not listed; a page that is listed still needs
readable markup before it can rank or be cited.
Where each setting lives
Webflow spreads the SEO controls across four places. Knowing which one owns a setting avoids the most common mistake, which is changing a value in one place and wondering why the published page still shows another.
| Place | Scope | Settings |
|---|---|---|
Page settings, in the Pages panel |
One static page or one Collection template |
SEO title tag, meta description, Open Graph title, description and image, page canonical URL, sitemap indexing toggle, site search exclusion, page-level custom code, schema markup |
Site settings > SEO |
The whole site |
Global canonical tag URL, auto-generated sitemap and custom sitemap, indexing ( |
Localization panel |
Locales of a localized site |
Per-locale titles, descriptions and Open Graph values, hreflang generation, locale routing |
Audit panel in the Designer |
The page or the whole site |
Reports missing alt text, titles, descriptions and schema markup, and offers AI fixes |
Page settings are also reachable from the Editor, so a content editor with the right role can fix a title without opening the Designer. The Collection Template Pages page explains how a template page binds those settings to CMS fields, which is the key to SEO at scale.
Page titles and meta descriptions
The title tag is the clickable headline in a search result and the label in a browser tab. The meta description is
a summary that a search engine may show under the title. Webflow stores both in the page’s SEO settings and writes them
into the published head.
<head>
<title>Fern Walk | Fernbrook Gardens</title>
<meta name="description" content="A guided walk through the shade garden, with 40 fern species from six continents.">
</head>
Source: Designer API: Set page metadata
Static pages
On a static page, open the Pages panel, select the page settings (the cog icon) and fill in the SEO title tag and the meta description. Webflow does not enforce a length. Search engines truncate long titles and descriptions by pixel width rather than character count, and they are free to rewrite either, so the useful discipline is: put the distinguishing words first, keep the brand name last, and write a description that answers why a visitor should click.
For Fernbrook Gardens the Visit page uses Visit Fernbrook Gardens | Opening hours and tickets, which leads with the intent a visitor has rather than with the brand.
Collection template pages
A Collection template page is a single design that renders one page per CMS item, so a single hand-written title would be wrong for every item. Webflow lets the title and description of a template combine static text and CMS fields. For the Plants template, the SEO title is built from the plant’s Name field followed by static text, and the meta description is built from a short summary field.
| Template setting | Value for the Plants template |
|---|---|
SEO title tag |
The Name field, then the static text "Fernbrook Gardens" after a separator |
Meta description |
The Summary field, then static text pointing to the care notes |
Open Graph title |
The same as the SEO title (use the checkbox that reuses it) |
Open Graph image |
The Main image field |
Two consequences follow. First, a CMS item that leaves the summary empty produces a page with a thin or empty description, so make the field required in the collection definition (see Collections and Field Types). Second, titles inherit the quality of the content: two plants with the same name produce duplicate titles, which is the reason the Plants collection also holds a Latin name field and the template title can include it.
A common design is a dedicated plain-text SEO title field and SEO description field on the collection, bound in the template. The editor then controls the search appearance of each item without touching the visible heading, at the cost of two more fields per item. The CMS Concepts and Content Modeling page discusses that trade-off.
Headings and body content
The title tag is not the page’s visible heading. Each page should have exactly one h1 that describes it, then h2
and h3 elements in order. Search engines and answer engines both read the heading outline to decide what a page is
about, and answer engines in particular tend to lift the passage under a heading that phrases a question. A Fernbrook
page headed When do the magnolias bloom? followed by a two-sentence answer is easier to cite than a page that buries
the answer in a long marketing paragraph. The Accessibility page covers semantic
tags and heading order from the assistive-technology side, and the same structure serves search.
Pitfalls
-
Duplicate titles across a collection. A template that binds only a static string, or a field that is not unique, produces the same title on hundreds of pages.
-
Empty fields. If a bound field is empty, the template renders only its static text. Make the field required or provide a fallback.
-
Titles set only in the Designer for a localized site. Secondary locales need their own title and description, or they show the primary-locale text. See the Localized SEO section below.
Open Graph tags
Open Graph is a set of meta tags, originated by Facebook and now read by most social networks, chat apps and
link-preview services. They control the title, description and image shown when a page URL is shared. Webflow supports
the three that matter, the Open Graph title, description and image, in the page settings. Each of the title and
description fields has a checkbox that reuses the SEO title or the meta description, so you only type a separate social
value when it should differ.
<meta property="og:title" content="Fern Walk | Fernbrook Gardens">
<meta property="og:description" content="A guided walk through the shade garden.">
<meta property="og:image" content="https://cdn.prod.website-files.com/SITE_ID_PLACEHOLDER/fern-walk.jpg">
<meta property="og:type" content="website">
The first three tags are generated from the page settings. Other Open Graph properties, such as og:type or
article:published_time, are not exposed as fields, so add them with page-level custom code. See
Custom Code in the Head, Footer and Embeds for where that code
goes and how Webflow orders it.
On a Collection template the Open Graph image can be bound to an image field, which is how every plant gets its own share image. Use an image with a landscape aspect ratio and enough resolution for a large preview; the Images and Assets page explains the conversion Webflow applies to uploaded files. Social platforms cache previews aggressively, so after changing an image, use the platform’s own debugger to refresh the cached card rather than assuming that republishing is enough.
The sitemap
A sitemap is an XML file that lists the URLs a site wants crawled. It does not force indexing; it tells a crawler
which URLs exist and, optionally, when they changed. Webflow serves it at /sitemap.xml.
Auto-generated sitemap
In Site settings > SEO > Sitemap set Auto-generate sitemap to Yes, save and publish. From then on Webflow
rebuilds the file on every publish, so a new plant item that you publish appears in the sitemap without any manual step.
The auto-generated sitemap lists static pages and Collection pages, uses the site’s default domain so that crawlers do
not hit a redirect for every URL, and includes hreflang entries for localized pages. Once a sitemap has been published
the /sitemap.xml path stays reserved.
Webflow adds a link to the sitemap in the generated robots.txt by default; the robots article describes a toggle that
removes it, which is needed only when the sitemap lives elsewhere.
Excluding a page from the sitemap
Each static page and each Collection template has a sitemap indexing toggle in its page settings. Turning it off keeps the page out of the auto-generated sitemap and tells search engines not to index it. The toggle works only while the auto-generated sitemap is on. For Fernbrook Gardens the toggle is off on the 404 page, the thank-you pages that follow the forms and the Volunteers landing page. Password protection (see Password Protection and Site Search) is a separate control: it stops visitors, but it is the indexing toggle that stops the page from being advertised to crawlers.
Excluding a page from site search, a different checkbox in the page settings, affects only Webflow’s own site search and has no effect on Google. The two settings are easy to confuse.
Custom sitemap
Turn off auto-generation and a field appears where you paste your own XML. Use this only when you need something the automatic file cannot express, such as listing URLs from a reverse proxy or adding image and video extensions. The cost is that nothing updates the file when content changes, and on a localized site you must add the hreflang annotations for every page yourself.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.fernbrook-gardens.example/visit</loc>
<lastmod>2026-10-28</lastmod>
</url>
<url>
<loc>https://www.fernbrook-gardens.example/plants/royal-fern</loc>
<lastmod>2026-10-20</lastmod>
</url>
</urlset>
Submitting the sitemap
Webflow does not submit the sitemap to search engines for you. Add the property to Google Search Console and Bing
Webmaster Tools, submit https://www.fernbrook-gardens.example/sitemap.xml once, and use their coverage reports to see
which URLs were discovered and which were excluded and why.
robots.txt
robots.txt is a text file at the root of a domain that asks crawlers which paths they may fetch. It is a request, not
an access control: well-behaved crawlers obey it and nothing forces the rest to. Two consequences matter.
-
Blocking a path in
robots.txtdoes not remove it from search results. A blocked URL can still be listed if other sites link to it, because the crawler never fetches the page and therefore never sees anoindexinstruction. To remove a page, let it be crawled and mark itnoindex(or delete it), then block it later if you still want to. -
Anyone can read the file. Do not list secret paths in it, because that publishes them. Use password protection or authentication for anything confidential.
Editing robots.txt in Site settings
In Site settings > SEO > Indexing you can write custom rules. Webflow keeps the sitemap line by default and has a
toggle that removes it. The same panel lets you disable indexing for the webflow.io staging subdomain, so a
preview copy of the site does not compete with the real one. The robots article also describes a content signal for AI
crawlers, a way to declare how content may be used by AI systems.
User-agent: *
Disallow: /volunteers/
Disallow: /search
Sitemap: https://www.fernbrook-gardens.example/sitemap.xml
This blocks the Volunteers area and the internal search results page. The search results page is thin by construction, since it repeats content that already has its own URLs, which is the usual reason to keep it away from crawlers.
Blocking AI crawlers
Answer engines are fed by crawlers with their own user agents. Blocking them is a business decision that trades
visibility for control. Fernbrook Gardens wants to be cited, so it allows them. A site that does not could add a
Disallow: / group for a specific crawler’s user agent. Check each vendor’s published crawler documentation for the
exact user-agent names, because they differ by vendor and by purpose (training, search indexing and user-initiated
fetches are often separate agents).
Managing robots.txt with the Enterprise API
On an Enterprise workspace the robots.txt content can be read and changed through the Data API, which lets a
deployment script keep rules consistent across many sites. The endpoint requires the site_config:write scope.
curl -X PATCH "https://api.webflow.com/v2/sites/SITE_ID_PLACEHOLDER/robots_txt" \
-H "Authorization: Bearer YOUR_API_TOKEN_PLACEHOLDER" \
-H "Content-Type: application/json" \
-d '{
"rules": [
{
"userAgent": "*",
"allows": [],
"disallows": ["/volunteers/", "/search"]
}
],
"sitemap": "https://www.fernbrook-gardens.example/sitemap.xml"
}'
Source: Data API: Update robots.txt
The response repeats the stored rules and sitemap. The request follows the same rate-limit rules as the rest of the
Data API; see Data API SDKs, Limits and Errors.
Canonical URLs
A canonical URL tells search engines which address is the preferred version when the same content is reachable at
several. Duplicates arise from tracking parameters, the webflow.io copy of the site, http and https, www and the
apex domain, and filtered or paginated lists. Without a canonical, a search engine picks one itself, and its choice can
differ from yours.
Global canonical tag
In Site settings > SEO enter the base URL in Global canonical tag URL. Webflow appends each page’s path to it and
writes a link rel="canonical" tag in every page. The base URL must be absolute, including the protocol, and must not
end in a slash.
<link rel="canonical" href="https://www.fernbrook-gardens.example/plants/royal-fern">
Page-level override
Open a static page’s SEO settings and fill Page canonical URL with a full absolute URL to override the global value for that page. The value must be absolute; a relative path is not a valid canonical. Typical uses are a landing page whose content duplicates another page, or a syndicated article that should point to its original location.
Pitfalls
-
Two sources of canonical tags. If a tag manager or custom head code also injects a canonical, the page ends up with two, and search engines ignore conflicting ones. Choose one mechanism.
-
A canonical that points to a redirected or blocked URL. The canonical target must return a normal 200 response and be crawlable.
-
Canonical is a hint, not a directive. Search engines may choose a different URL if signals disagree, such as when the sitemap lists one version and the canonical names another. Keep the sitemap, the canonical, internal links and the default domain consistent.
-
Cutting over domains. Set the global canonical to the final domain and add redirects before the move; see Redirects and Site Migration.
Controlling indexing: noindex
Four mechanisms exist, and they answer different questions.
| Mechanism | What it does | Use when |
|---|---|---|
Sitemap indexing toggle off (page settings) |
Removes the page from the auto-generated sitemap and asks search engines not to index it |
A page that exists for visitors but not for search, such as thank-you pages |
|
Tells crawlers that fetch the page not to index it |
You need explicit control on a single page, or the toggle is unavailable |
|
Stops compliant crawlers from fetching the path |
You want to save crawl budget on areas that are already unindexed |
Password protection or authentication |
Stops visitors, including crawlers, from reading the page |
The content is confidential |
For a page-level tag, add this in the page’s custom code in the head, then publish.
<meta name="robots" content="noindex, follow">
Do not combine "disallow in robots.txt" with "noindex" on the same page and expect both to work: the block prevents the crawler from reading the tag. Follow the order described in the robots.txt section above.
On a Collection template the toggle applies to every page generated from it, and there is no per-item switch. To keep
a single item out of search, add a switch field such as Hide from search and use conditional visibility to render a
noindex meta tag in a template-level embed only for items that have it on; see
Conditional Visibility and Dynamic Embeds. Test the
published page source to confirm the tag appears only where intended.
Structured data and schema markup
Structured data is machine-readable annotation of what a page is about. The vocabulary is Schema.org and the recommended syntax is JSON-LD, a block of JSON inside a script tag in the page. Search engines use it for rich results (event listings, FAQs, products, breadcrumbs) and answer engines use it to identify entities and facts with less guessing.
Hand-written JSON-LD in custom code
The long-standing method is to add a script of type application/ld+json in the page’s custom code, or in an embed
element on a template. On a Collection template you can place CMS field values inside the JSON by using the embed
editor’s Add Field option, so every item generates its own block.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Night of the Moon Garden",
"startDate": "2026-11-14T19:00:00+01:00",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"location": {
"@type": "Place",
"name": "Fernbrook Gardens",
"address": "1 Garden Lane, Fernbrook"
},
"offers": {
"@type": "Offer",
"url": "https://www.fernbrook-gardens.example/events/moon-garden",
"availability": "https://schema.org/InStock"
}
}
</script>
On the Events template, name, startDate and the offer URL come from the Name, Date and time and Ticket link
fields. Two cautions apply:
-
Date format. Schema.org expects ISO 8601. Webflow’s date field output may not match, so check the rendered source and, where it differs, store a plain-text ISO field for the schema.
-
JSON escaping. A CMS text value that contains a double quote or a line break breaks the JSON and silently invalidates the block. Use short plain-text fields, not rich text, as the source for structured data.
Schema markup in Page settings and the Audit panel
Webflow has also added a schema markup editor in the page settings that stores one JSON-LD block per page, with a separate value per locale. Webflow AI can draft the markup from the page content, and the Audit panel flags pages that have none. The generation is available in the primary locale only during the beta, and Reference, Multi-reference and Multi-image CMS fields are not supported in schema markup, so a plant’s Zone reference or Companions list cannot be bound into it. Flatten what you need into a plain-text field.
The JSON-LD API (beta)
The beta Pages API reads and writes the same schema markup, which makes it possible to apply markup to hundreds of
pages from a script instead of editing each one. The endpoints live under the beta prefix. The update endpoint replaces
the page’s markup, requires the pages:write scope, and accepts a JSON object, a raw JSON string, or a string wrapped
in a script tag. Sending null clears the markup. An optional localeId query parameter targets a secondary locale;
without it the primary locale is written. The limits are 60 KB of raw input, nesting depth 32 and 5,000 nodes. Bulk
endpoints read up to 100 pages and update up to 25 pages per request. If a secondary locale has no markup of its own,
reads return the primary markup with isInherited set to true.
curl -X PUT "https://api.webflow.com/beta/pages/PAGE_ID_PLACEHOLDER/schema-markup" \
-H "Authorization: Bearer YOUR_API_TOKEN_PLACEHOLDER" \
-H "Content-Type: application/json" \
-d '{
"jsonLdSchema": {
"@context": "https://schema.org",
"@type": "Park",
"name": "Fernbrook Gardens",
"url": "https://www.fernbrook-gardens.example/"
}
}'
The same logic in TypeScript, as part of a deployment script that tags the home page. The token is read from the environment and never written in source.
const token = process.env.WEBFLOW_TOKEN;
if (!token) throw new Error("WEBFLOW_TOKEN is not set");
const homePageId = "PAGE_ID_PLACEHOLDER";
const response = await fetch(
`+https://api.webflow.com/beta/pages/${homePageId}/schema-markup+`,
{
method: "PUT",
headers: {
Authorization: `+Bearer ${token}+`,
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonLdSchema: {
"@context": "https://schema.org",
"@type": "Park",
name: "Fernbrook Gardens",
url: "https://www.fernbrook-gardens.example/",
},
}),
},
);
if (!response.ok) {
throw new Error(`+Schema update failed: ${response.status}+`);
}
console.log(await response.json());
Because the response lists effectiveLocaleId and isInherited, a script can tell whether the German locale carries
its own block or inherits the English one. See Data API:
Sites, Pages and Components for the surrounding page endpoints.
Which types are worth the effort
| Fernbrook page | Schema.org type | Why |
|---|---|---|
Home |
|
Names the entity, its logo, address and social profiles |
Event pages |
|
Eligible for event rich results; carries date, place and ticket URL |
Journal posts |
|
Author, dates and headline; helps answer engines attribute the post |
Visit |
|
Opening hours and location are the most asked question |
FAQ blocks |
|
Question and answer pairs are easy for answer engines to lift |
Every deep page |
|
Shows the path in search results |
Markup must describe content that is visible on the page. Marking up information that visitors cannot see violates search engine guidelines and can lead to manual action. After publishing, validate with the Rich Results Test and the Schema.org validator and check Search Console’s enhancement reports for errors.
llms.txt and well-known files
llms.txt is a proposed convention, a Markdown file at the root of a site that lists the pages an AI system should read
first. Webflow describes it as a new and experimental convention that is not widely adopted, and its effect on AI-driven
search is unclear. Treat it as inexpensive to provide and unproven to help.
Uploading in Site settings
Open Site settings > SEO > LLMs.txt and upload a file that is UTF-8 encoded and smaller than 100 KB. Webflow serves it from the root of the domain and keeps it out of search indexes.
# Fernbrook Gardens
> A botanical garden with 3,000 plant species. This file lists the pages that answer visitor questions.
## Visit
- [Opening hours and tickets](https://www.fernbrook-gardens.example/visit): Seasonal hours, prices, accessibility
- [Group visits](https://www.fernbrook-gardens.example/visit/groups): How to book a guided tour
## Plants
- [Plant directory](https://www.fernbrook-gardens.example/plants): Every plant with care notes and bloom months
## Optional
- [Garden Journal](https://www.fernbrook-gardens.example/journal)
The Enterprise llms.txt API (beta)
Enterprise workspaces can read and write the file with the Data API. The beta endpoints are GET and PATCH on
/beta/sites/{site_id}/llms_txt; reading needs site_config:read and writing needs site_config:write. The body is a
JSON object whose fileData string holds the Markdown.
curl -X PATCH "https://api.webflow.com/beta/sites/SITE_ID_PLACEHOLDER/llms_txt" \
-H "Authorization: Bearer YOUR_API_TOKEN_PLACEHOLDER" \
-H "Content-Type: application/json" \
-d '{ "fileData": "# Fernbrook Gardens\n\n> A botanical garden.\n\n## Visit\n\n- [Hours](https://www.fernbrook-gardens.example/visit)\n" }'
Source: Data API (beta): Update LLMS.txt
Well-known files
Some conventions require a file under the /.well-known/ path, such as security.txt, domain-verification files or
app-association files. Enterprise workspaces can upload them with a PUT to /v2/sites/{site_id}/well_known. The body
has fileName, fileData and an optional contentType of application/json (the default) or text/plain. Each file
must be smaller than 100 KB, a site can hold fewer than 30, and the allowed extensions are .txt, .json or none.
Webflow’s .noext marker removes the other extensions on upload, so apple-app-site-association.noext.txt is stored as
apple-app-site-association. The scope is site_config:write, and a success response is 201 with an empty object.
curl -X PUT "https://api.webflow.com/v2/sites/SITE_ID_PLACEHOLDER/well_known" \
-H "Authorization: Bearer YOUR_API_TOKEN_PLACEHOLDER" \
-H "Content-Type: application/json" \
-d '{
"fileName": "security.txt",
"fileData": "Contact: mailto:security@fernbrook-gardens.example\nExpires: 2027-10-28T00:00:00.000Z\n",
"contentType": "text/plain"
}'
Source: Data API: Set a well-known file
Webflow’s MCP server also exposes Enterprise tools for robots.txt and well-known files in its beta; see MCP Server and AI Agents.
The Audit panel
The Audit panel in the Designer scans the current page or the whole site and lists problems grouped by type. For SEO and AEO it reports missing image alt text, missing meta titles and meta descriptions, and missing schema markup, and it also reports accessibility issues. Clicking a result selects the element or opens the page setting that needs fixing, and when nothing is found it displays No issues found.
It is useful and it is limited. Its limits, as documented:
-
It checks that alt text exists, not that it is any good. The text "image" passes.
-
It does not check alt text on images inside Lightbox media elements or on images bound to CMS fields, and it does not look inside components, so those need manual review.
-
It does not judge content: a title can be present and still be duplicated across fifty pages.
-
It cannot see what is added by custom code or third-party scripts at runtime.
For Fernbrook the editorial checklist adds three things the panel cannot do: every Plants item has non-empty image alt text in the CMS field, titles are unique, and the sitemap lists no page that returns an error.
AI-assisted SEO and AEO audit
Webflow AI extends the Audit panel. The panel can audit the asset library for missing alt text and review static and Collection pages for missing titles, descriptions and schema markup, and Webflow AI can generate drafts of each for review before publishing. The help article lists these rules:
-
Any role except Reviewer can use the AI accessibility, SEO and AEO features, provided the site has a paid Site plan or belongs to a paid Workspace.
-
Generating content requires Webflow AI to be enabled in the Workspace settings.
-
Generation consumes AI credits; see AI Features and Credits for how credits are counted.
-
On Team and Enterprise, AEO agents scan the site and surface prioritized SEO and AEO recommendations, which you review and apply from a Recommendations dashboard.
-
Generation works in the primary locale only. Localized titles, descriptions, schema markup and alt text for secondary locales are written by hand.
Always read generated text before publishing. A generated description is plausible by design, which is not the same as true, and a plant care claim that is wrong is worse than a missing description. The Fernbrook workflow accepts a draft only after a horticulturist has read it.
AEO analytics
SEO tools such as Search Console show clicks from search engines. They do not show whether an assistant named your brand in an answer. AEO analytics fills that gap. It needs a Team or Enterprise plan with the Analyze add-on, and the Workspace’s Webflow AI setting enabled. It reports three families of data.
-
Prompt insights. You configure the questions that matter to the business. Webflow runs each tracked prompt daily against ChatGPT, Claude, Gemini and Perplexity, records whether your organization name or an alias appears (a mention), and records which URLs were cited. The visibility score is the fraction of responses that mention your organization. The citation rate is the fraction of responses with at least one citation that cited one of your domains.
-
LLM bot insights. Requests from AI crawlers to your site, by provider and category (agent, indexer, training or multiple), and which pages, CMS items and files they requested most. This counts requests, not visitors.
-
Visitor data. How visitors referred by AI behave once they arrive, through the Analyze product.
Fernbrook tracks prompts such as best botanical gardens for ferns and plant a shade garden in zone 6. A drop in visibility after a redesign, with the bot-traffic report showing that crawlers requested pages that now redirect, is the kind of finding that points to the cause.
The AEO analytics API (beta)
The same data is available through the Data API. All endpoints are read-only GET requests, need the sites:read
scope and the AEO analytics entitlement, and, except for the two bot-traffic endpoints, require Webflow AI to be enabled
for the workspace.
| Endpoint | Returns |
|---|---|
|
Total requests from tracked AI bots |
|
Pages, CMS items and files bots requested most |
|
Tracked prompts, topics and statuses |
|
Visibility score per topic or prompt |
|
Responses that cite a competitor and none of your domains |
The reference lists further endpoints for prompt executions, citation rate, top cited domains and cited paths. The rules that matter in practice are these:
-
Reports take
startTime(inclusive) andendTime(exclusive) in UTC, with a window of at most 100 days. -
Bot-traffic
endTimecannot be later than the start of the current UTC day. -
Prompt executions are listed for 90 days; after that the raw response text is omitted, and after 120 days the execution is deleted. Export what you need to keep.
-
Only one AEO request per access token can be in flight at once, and exceeding that or the per-minute rate limit returns
429with aRetry-Afterheader. -
Visibility endpoints return a
400with the codebrand_not_configureduntil an organization name is set in the AEO settings.
curl -G "https://api.webflow.com/v2/sites/SITE_ID_PLACEHOLDER/aeo/reports/bot_traffic" \
-H "Authorization: Bearer YOUR_API_TOKEN_PLACEHOLDER" \
--data-urlencode "startTime=2026-10-01T00:00:00Z" \
--data-urlencode "endTime=2026-10-28T00:00:00Z" \
--data-urlencode "botCategory=indexer"
A scheduled job can store the numbers weekly in a spreadsheet to build a trend that the dashboard’s retention does not keep. The API is announced in the developer changelog as a beta.
Localized SEO
A localized site multiplies the work: every locale needs its own title, description, Open Graph values, alt text and
schema markup, and search engines need to know which page is the translation of which. Webflow sets the HTML lang
attribute and generates hreflang annotations automatically, in the page and in the auto-generated sitemap. You need
only one of the two signals, and both may be present. Only locales that have publishing enabled are listed.
<link rel="alternate" hreflang="en" href="https://www.fernbrook-gardens.example/visit">
<link rel="alternate" hreflang="es" href="https://www.fernbrook-gardens.example/es/visit">
<link rel="alternate" hreflang="de" href="https://www.fernbrook-gardens.example/de/visit">
Points worth knowing:
-
A custom sitemap does not get hreflang for free; you add every annotation.
-
Automatic locale routing at domain level is limited to higher Localize tiers and only applies to visitors who land on the root homepage. Do not rely on it to send crawlers to the right language; crawlers need crawlable links.
-
301 redirects are relative to the root domain and do not apply to localized slugs or subdirectories, so redirect each locale’s old URLs separately.
-
AI generation of titles and schema works in the primary locale only; translate or write the secondary values.
The Localization page covers locales, routing and translated CMS items in full.
Performance and crawlability
Search engines treat page experience as one signal among many, and AI crawlers fetch pages with limited patience. The foundation is handled by hosting: pages are static HTML served from a CDN, which is fast by default. What you can damage is the content. Large unoptimized images, many fonts and heavy third-party scripts raise load time; see Performance Optimization. Content produced only by client-side JavaScript is also riskier than HTML in the page, because not every crawler runs scripts. Keep answer-bearing text in the HTML.
Redirect chains waste crawl effort and lose signals; keep every old URL one hop from its final address (see Redirects and Site Migration). Broken internal links and soft 404s hurt both audiences, and a custom 404 page with a real 404 status code is the right response for missing content.
The general principles behind these settings, independent of Webflow, are on SEO in the HTML and CSS section.
A launch checklist for Fernbrook Gardens
-
Set a unique title and description on every static page; build titles and descriptions for the Plants, Events and Journal templates from CMS fields.
-
Set the Open Graph image on the home page and bind it on each template.
-
Set the global canonical URL to
https://www.fernbrook-gardens.examplewith no trailing slash, and confirm the default domain matches. -
Turn on the auto-generated sitemap, switch the indexing toggle off for the 404, thank-you and Volunteers pages, and submit
/sitemap.xmlin Search Console and Bing Webmaster Tools. -
Review
robots.txt: allow the content, block internal search and the Volunteers area, and decide on AI crawlers. -
Disable indexing for the
webflow.iostaging domain. -
Add
Park,Event,ArticleandBreadcrumbListstructured data and validate each type. -
Upload
llms.txtif the team wants it, and treat it as an experiment. -
Run the Audit panel on the whole site and fix missing alt text, titles and descriptions.
-
For each locale, repeat titles, descriptions, alt text and schema; check hreflang in the published source.
-
After launch, watch the Search Console coverage report and, if the plan includes it, AEO analytics.
Common pitfalls
| Pitfall | What to do |
|---|---|
Publishing without a default domain |
Set the default domain so that sitemap and canonical URLs agree and crawlers do not follow a redirect for each URL. |
Blocking a page in robots.txt to remove it |
Let it be crawled with |
Two canonical tags |
Use either the Webflow settings or a tag manager, not both. |
Same title on every template page |
Bind a unique field into the title and make it required. |
Schema that does not match the page |
Mark up only visible content and validate after every template change. |
Treating the Audit panel as complete |
It misses CMS-bound and component images and does not judge text quality. |
Staging copy indexed |
Disable indexing on the |
Relying on |
It is an experimental convention; invest first in clear HTML and structured data. |
Forgetting secondary locales |
Write titles, descriptions, alt text and schema for each locale, then check hreflang. |