A product page has a detailed description in one tab, a spec table in another and two hundred reviews below – and when someone asks an AI assistant about the product, the answer is based on two sentences from the meta description. Intuition says display: none is to blame. That's almost never true: crawlers read HTML, they don't look at the rendered page, so hiding something with styles doesn't bother them. What bothers them is content that isn't in the HTML at all – rendered conditionally, loaded on scroll, inserted by CSS or baked into an image. I show exactly where it gets lost and how to check it with one command.
Six cards on a dashboard, six spinners, and they don't appear together — they appear one after another, like dominoes, because each one only started fetching after the one above it finished. That's a waterfall, and the total wait isn't the slowest request, it's the sum of all of them. use() and Suspense break the chain, but the interesting part is the machinery underneath: what a suspended component actually throws, and how HTML that arrives out of order still lands in the right place.
For ten years, animating a thumbnail into a hero image meant one technique: measure the element before, measure it after, fake the difference with a transform, and let it play. FLIP. Every animation library does it, and every one of them pays for it with JavaScript on the main thread at the worst possible moment. The View Transitions API moves that whole trick into the browser — and since React 19.2 and Next.js 16, the entire contract is a single prop called name.
"use server" looks like syntactic sugar over a fetch call to an API route – and that's exactly why most implementations treat it like an ordinary function call. That's a mistake with real consequences: every function marked "use server" becomes a public endpoint on the network, and a form built on this mechanism works even before JavaScript has had a chance to load. I look at what actually happens behind that directive, and where the pitfalls sit that the docs don't make obvious at first glance.
Correct HTML is only the starting point. See how the accessibility tree actually works, why ARIA does more harm than good more often than you'd think, and build a real accordion, a live region, and Next.js focus handling with me.