The design decisions that make your site invisible to AI
A handful of ordinary design decisions remove your content from AI answers entirely, and the biggest one is rendering. If your text arrives in the browser through JavaScript, most AI crawlers never see it. They fetch the HTML, read what's in it, and leave.
Category
Build
Reading time
6 min

A handful of ordinary design decisions remove your content from AI answers entirely, and the biggest one is rendering. If your text arrives in the browser through JavaScript, most AI crawlers never see it. They fetch the HTML, read what's in it, and leave.
Desses designs and builds websites, most of them in Framer. Every pattern below is one I've shipped or pulled out of someone else's build, and a studio that sells rebuilds has an obvious reason to call your site broken. Half this list costs nothing. I've priced those at zero.
Two definitions. Server-side rendering means the HTML your server sends already contains the page's text, before any JavaScript runs. Client-side rendering means the server sends a near-empty shell and the browser assembles the page afterwards. A browser does that assembly work. A crawler reading raw HTML doesn't.
The evidence for that sits in two places. Vercel measured it across its own network in December 2024 and found no major AI crawler executing JavaScript, and searchVIU tested five systems again in December 2025 with Gemini the only one rendering on a live fetch. Both are thin samples pointing the same way, and the full picture is in the crawler article.
Client-rendered React with no server rendering
Cost: the whole page.
A React app that renders on the client ships an HTML document containing a div and a script tag. That's what the crawler gets. Your positioning, your pricing, the one sentence you wrote six times until it was right, none of it is in the document that gets read. The page never enters the pool.
It's the only item here that costs everything, and the one most likely to be true of a site that looks expensive. The fix is server rendering or pre-rendering. Framer's documentation states every page is pre-rendered to HTML on their servers before it's served. The test takes a minute: fetch your URL with curl and search for a sentence you'd want quoted. If it isn't there, nobody has it.
Text baked into an image
Cost: the text.
A headline set inside an exported image, or a diagram carrying the only place you state what you do. Both delete the words from the document. Claude's crawler pulled 35.17% images in that same Vercel data. The file gets fetched. No provider publishes anything about reading the words out of it on a live fetch, so treat that as unavailable.
Live text over the image. Alt text as a second copy. Pricing as an HTML table, which Framer has supported in rich text since March 2025.
Tabs, accordions and the content nobody clicks
Cost: it depends on how they were built. This is where most advice gets it wrong.
If the panel's content sits in the HTML and CSS hides it, a crawler gets all of it. Nothing is lost. If the panel fetches or mounts its content on click, the content doesn't exist in the document at all. Nobody clicks. Same interface, two outcomes, and you can't tell which one you have by looking at the site.
Build accordions with the content already in the markup. And keep your answer out of them, because the top of the page is where citations come from.
Scroll-triggered reveals
Cost: usually nothing.
Fading a section in as it enters the viewport, staggering three cards by 80ms. If the elements are in the HTML and the animation is opacity and transform, a crawler reads every word and never knows the animation exists. Price it at zero and stop apologising for it.
The version that costs you mounts the section on intersection, so the markup contains nothing until a real viewport scrolls past. That's a client-rendered page wearing a nicer coat.
A site can animate. It cannot animate the words it wants quoted.
Infinite scroll on a listing page
Cost: everything past the first batch.
Framer's CMS pagination runs on infinite scroll or a Load More button, and Framer says the consequence plainly: infinite scrolling relies on JavaScript, and crawlers that don't execute it may never see the content. Googlebot is the exception Framer names, rendering within a viewport of roughly 12,000 pixels. I use Framer daily. That's a real limit of the platform, documented by the people who built it.
Numbered pagination URLs aren't possible on Framer. Framer's own fix is an HTML sitemap page listing the site's important links, alongside sitemap.xml. Do that, set the first batch large enough to carry the items that matter, and link the pieces you care about from body copy on pages that already render.
A hero that animates its headline in
Cost: your most quotable sentence, or nothing at all.
Two implementations look identical at 60fps. In the first, the H1 is in the HTML and CSS moves it. In the second, a text library splits the headline into per-character spans at runtime and the delivered H1 is empty. Your best line, the one you'd want lifted verbatim, isn't on the page.
Real H1 in the markup. Animate the container it sits in. The motion survives, the sentence survives, nobody has to choose.
Navigation that only exists in JavaScript
Cost: link discovery.
A crawler reading raw HTML follows the anchor tags that are in it. A menu assembled on click leaves none for it to follow. Your sitemap covers part of the gap. Internal links carry anchor text and the context of the sentence around them. Real anchor tags in the document, with descriptive text. This is a 2004 requirement that came back.
The seven, priced
Pattern | What a fetch without JavaScript gets | Cost | Fix |
|---|---|---|---|
Client-rendered React, no SSR | An empty div | The whole page | Server-render or pre-render |
Text baked into an image | The | The words in it | Live text, alt text, HTML tables |
Accordion, content in the HTML | All of it | Nothing | Keep the answer outside it anyway |
Accordion, content on click | The trigger button | The panel | Ship the content in the markup |
Scroll reveal, CSS on real elements | All of it | Nothing | Keep animating |
Scroll reveal, mount on intersection | Empty sections | Everything below the fold | Render, then animate |
Infinite scroll listing | The first batch | The archive | Bigger first batch, HTML sitemap, body links |
Animated headline, real H1 | The headline | Nothing | Keep animating |
Animated headline, split at runtime | An empty H1 | Your best sentence | Real H1, animate the container |
JS-only navigation | No internal links | Discovery | Anchor tags in the HTML |
When none of this matters
Some companies should read this and do nothing.
If your buyers don't use AI search, none of it applies. Enterprise procurement running a formal RFP, or a market where three people decide and you already know all three. Ask five customers how they found you before you spend a euro on this.
If your product has no informational surface, there's nothing to be cited for. A single-page site with a demo form and a logo wall has no questions to answer.
If your whole funnel is outbound, this work is a hobby with a spreadsheet attached. Fix the funnel you have.
And if the only thing wrong with your site is one accordion, do it yourself on a Thursday afternoon. We don't take projects under €3,000, and a studio that tells you every design decision needs a rebuild is selling you something.
What we'd do, in order
Fetch the page as a plain HTTP request and read what comes back. On Framer you can skip curl: append ?md to any URL, or send an Accept: text/markdown header, and Framer returns the page as markdown.
Search that output for the sentence you want quoted. Then the H1. Then your pricing. Whatever's missing is the work.
Rendering comes first. If it's broken, everything else is a rounding error. After that, move the answer to the top of the page, put live text over anything you'd want lifted, unpick the panels that mount on click, and check that your structured data says the same thing as your visible text. That last one is Google's only structured-data instruction for AI features.
Then design the rest however you like. None of this is an argument for restraint. If you want these calls made on your build, that's our website design work, from $8,000 over three to four weeks.
Send me your URL and I'll fetch it the way a crawler does, then send back what came out. If everything's in there, I'll tell you that and you've lost five minutes.













