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.

Oskar Mieta

Founder, Designer & Developer

Summarize with AI

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.

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 img tag

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.

Questions people ask about this

Does Google see my JavaScript?

Gemini renders it, on Googlebot's infrastructure. Vercel named it as one of two exceptions in December 2024, and searchVIU found it the only renderer of five systems on a direct live fetch in December 2025. Google AI Mode and Perplexity picked up JavaScript-rendered content in that test after indexing rather than during the fetch. ChatGPT and Claude read raw HTML and stop there. A site can be fine in Google's AI Overviews and absent from ChatGPT.

Do animations hurt AI visibility?

No, when the animation moves text that's already in the HTML. Yes, when the animation is what puts the text there. Mounting on scroll and splitting text at runtime cost you whatever they're carrying.

Is content behind an accordion invisible to AI crawlers?

Only if the accordion loads its content on click. Content that sits in the HTML and is hidden with CSS gets read in full. Check by fetching the page and searching for a line from inside a closed panel.

Is a Framer site safe from this?

On rendering, yes. Framer's documentation states every page is pre-rendered to HTML server-side. The traps on Framer sit elsewhere: infinite-scroll pagination hiding deep archive items, heading tags set per text layer with nothing stopping an H2 to H4 skip, and sub-path changes that don't update your redirect settings.

Does alt text get cited?

Nothing published says so. Write it anyway. It costs a minute, it's required for accessibility, and it puts the words in the document.

Questions people ask about this

Does Google see my JavaScript?

Do animations hurt AI visibility?

Is content behind an accordion invisible to AI crawlers?

Is a Framer site safe from this?

Does alt text get cited?