Why our product gallery is not a carousel
Every product on this site is a real page. That decision was made for machines that do not run JavaScript.
The front page of this site looks like a slider. Arrows, a big square, one product at a time. Under the surface it is not a slider at all — every arrow is an ordinary link, and every product is its own statically generated page.
That is a deliberate choice, and the reason is unglamorous.
Crawlers stopped at HTML
Measurements on live traffic show that the crawlers behind AI answers — GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot — fetch JavaScript files and never execute them. Whatever a page renders on the client simply does not exist for them.
A conventional carousel keeps one route and swaps content with pushState. Users
see nine products. Every AI crawler sees one, forever. Search engines that do render
JavaScript still make their first indexing pass on the raw HTML, where nine products
share a single title and description.
What we did instead
Nine products, nine routes, nine pre-rendered documents with their own titles,
descriptions, canonicals and structured data. The arrows are <a href> elements,
so the site is fully navigable with JavaScript disabled.
The animation — the outgoing cover shrinking into a side thumbnail while the next one unfolds into the centre — comes from the View Transitions API. The same cover carries the same transition name on both pages, and the browser morphs one into the other. We wrote no animation code at all.
The test that matters
curl -s https://naasson.com/en/products/observability | grep '<title>'
If two different products return the same title, the architecture is wrong. That single command is worth more than most SEO audits.