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.txt file and arbitrary well-known files.

  • Measurement: the Audit panel, AI-assisted SEO and AEO audits, and AEO analytics.

flowchart LR A[Visitor or crawler requests a URL] --> B{Allowed by robots.txt?} B -- No --> X[Crawler skips the URL] B -- Yes --> C[Page HTML is served from Webflow hosting] C --> D{Indexing toggle on and no noindex tag?} D -- No --> Y[Fetched but not indexed] D -- Yes --> E[Title, description, canonical, headings, JSON-LD read] E --> F[Page listed in the sitemap] F --> G[Search engines rank links] E --> H[Answer engines select and cite passages]

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 (robots.txt, noindex for the webflow.io subdomain), llms.txt

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>

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.txt does 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 a noindex instruction. To remove a page, let it be crawled and mark it noindex (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"
      }'

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

noindex robots meta tag in page-level head code

Tells crawlers that fetch the page not to index it

You need explicit control on a single page, or the toggle is unavailable

Disallow in robots.txt

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

Park (or TouristAttraction) with WebSite and Organization

Names the entity, its logo, address and social profiles

Event pages

Event

Eligible for event rich results; carries date, place and ticket URL

Journal posts

Article or BlogPosting

Author, dates and headline; helps answer engines attribute the post

Visit

Park or TouristAttraction with openingHoursSpecification and address

Opening hours and location are the most asked question

FAQ blocks

FAQPage

Question and answer pairs are easy for answer engines to lift

Every deep page

BreadcrumbList

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" }'

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"
      }'

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

/v2/sites/{site_id}/aeo/reports/bot_traffic

Total requests from tracked AI bots

/v2/sites/{site_id}/aeo/reports/bot_traffic_pages

Pages, CMS items and files bots requested most

/v2/sites/{site_id}/aeo/prompts

Tracked prompts, topics and statuses

/v2/sites/{site_id}/aeo/reports/visibility_breakdown

Visibility score per topic or prompt

/v2/sites/{site_id}/aeo/reports/competitor_citations

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) and endTime (exclusive) in UTC, with a window of at most 100 days.

  • Bot-traffic endTime cannot 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 429 with a Retry-After header.

  • Visibility endpoints return a 400 with the code brand_not_configured until 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

  1. Set a unique title and description on every static page; build titles and descriptions for the Plants, Events and Journal templates from CMS fields.

  2. Set the Open Graph image on the home page and bind it on each template.

  3. Set the global canonical URL to https://www.fernbrook-gardens.example with no trailing slash, and confirm the default domain matches.

  4. Turn on the auto-generated sitemap, switch the indexing toggle off for the 404, thank-you and Volunteers pages, and submit /sitemap.xml in Search Console and Bing Webmaster Tools.

  5. Review robots.txt: allow the content, block internal search and the Volunteers area, and decide on AI crawlers.

  6. Disable indexing for the webflow.io staging domain.

  7. Add Park, Event, Article and BreadcrumbList structured data and validate each type.

  8. Upload llms.txt if the team wants it, and treat it as an experiment.

  9. Run the Audit panel on the whole site and fix missing alt text, titles and descriptions.

  10. For each locale, repeat titles, descriptions, alt text and schema; check hreflang in the published source.

  11. 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 noindex, or remove the page; blocking prevents the crawler from seeing the instruction.

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 webflow.io subdomain.

Relying on llms.txt for results

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.