
What an AI crawler actually receives from your site
AI crawlers do not run JavaScript, which is true, and the conclusion usually drawn from it is wrong for Webflow, Framer and Next.js. We measured six homepages to find where the real gap is.
The standard warning is that AI crawlers do not run JavaScript, so a modern site is invisible to them. The first half is true and well documented. The second half is a leap, and for the platforms most marketing sites are built on it is wrong. We measured it rather than assuming, because the measurement takes about a minute and the assumption has been repeated into folklore.
The method
A crawler that does not run JavaScript sees exactly the bytes the server returned and nothing else. So request the page with a crawler's user agent, strip everything inside script, style and noscript, remove the remaining tags, and count the words that are left. That is the content the crawler has to work with. The whole test is a curl and twenty lines of parsing, and anyone can rerun it against their own site.
| Site | Platform | Words in raw HTML | JSON-LD blocks | Bytes per word |
|---|---|---|---|---|
| growna.ai | Next.js | 2,763 | 3 | 129 |
| webflow.com | Webflow | 2,658 | 1 | 190 |
| A client site | Webflow | 895 | 2 | 155 |
| A client site | Webflow | 911 | 0 | 180 |
| A client site | Framer | 3,322 | 0 | 289 |
| framer.com | Framer | 1,661 | 1 | 1,328 |
Rendering is not the gap
Every site tested serves its content in the initial HTML. The Framer client site returns 3,322 words with nineteen h2 elements before a single line of JavaScript runs. The Webflow sites return their headings, their navigation and their body copy. This site returns 2,763. Webflow publishes static HTML and Framer server-renders its published sites, so the scare does not describe either of them.
The warning still holds for the pattern rather than the platform. Content that only exists after a fetch is genuinely invisible: a pricing table loaded from an API, a filtered result set, an accordion whose panels are injected on click, a review widget, a third-party embed. Those appear on Webflow and Framer sites as often as anywhere else, and that is the thing to audit. The platform is not the risk. The component is.
Two gaps the test does find
The JSON-LD column is the real finding. Two of the sites tested return no structured data at all, so nothing on the page tells a machine what kind of thing it is looking at or who published it. That is a much cheaper problem to fix than a rendering problem, and it is the one actually present.
The second is the bytes-per-word column, which is a way of asking how much of what you send is content. This site sends 129 bytes per visible word. Framer's own homepage sends 1,328, which is 2.2MB of HTML carrying 1,661 words. Nothing about that is broken and it renders beautifully for a person, but a crawler working through a lot of pages is paying for the whole payload to reach the tenth of a percent that is text. It is the same instinct behind keeping a page fast for humans, which we set out in why a Webflow site gets slow, applied to a different reader.
What to do with this
- Run the test on your own homepage before believing anything, including this. Fetch it with a crawler user agent, strip the scripts, and read what is left.
- Audit components, not platforms. Anything that arrives after a fetch is the thing at risk, whichever builder produced the page.
- Add the structured data before optimising anything else. It is the cheapest signal on the list and two of six sites here do not have it.
- Check the file before the page. A crawler that is disallowed never gets as far as the HTML, which is a separate audit: see which agents your robots.txt actually addresses.
The companion piece to this one is which AI crawlers actually obey robots.txt, which covers the access question, and how AI search engines decide what to cite covers what happens once a page is both reachable and readable. If you are still choosing between builders, the rendering question is not the one that should decide it: see Webflow or Framer.

