Full control over the HTML, which means the gaps are yours rather than the platform's.
Updated 6 min read
Webflow gives you clean semantic HTML and full head control, so nothing here is fought against the platform.
Site-wide schema
Project Settings → Custom Code → Head Code. Paste your Organization block. It appears on every page.
Per-page and CMS schema
Page Settings → Custom Code → Inside <head> tag. For CMS template pages you can interpolate field values directly:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "{{ Name }}",
"datePublished": "{{ Published On }}",
"dateModified": "{{ Updated On }}",
"author": { "@type": "Person", "name": "{{ Author }}" }
}
</script>
Add the field placeholders using the + Add Field control so Webflow escapes them correctly.
robots.txt
Project Settings → SEO → robots.txt. Paste the full AI crawler allow list.
llms.txt
Webflow does not serve arbitrary root text files directly. Two workarounds:
Create a page at /llms-txt with the content in a plain text block, then use a 301 from /llms.txt — Webflow redirects do allow this path.
Serve the file from a Cloudflare Worker in front of the domain. More setup, correct result.
The Webflow-specific trap
Interactions that reveal content on scroll or click. If the element starts at display: none, its text is still in the HTML — that is fine. If the content is loaded by a script or an embed, it is not. Check view-source, not the rendered page.
Share
Take this to your assistant
Paste it into ChatGPT, Copilot, Claude or Gemini and apply it to your own website.