gCurv logogCurv
Contact us
Engineering note

Your navigation may contain no links

We audited a site with nineteen destinations in its primary navigation. The server-rendered HTML contained two links: the logo, and one item.

Two things combined to cause it. The dropdown items were rendered as <button onClick={handleNav}> rather than <Link to>, so there was no href for anything that does not execute JavaScript to follow. And the dropdown panels were conditionally rendered — mounted only when open — so in the initial HTML they did not exist at all.

Either alone is survivable. Together they mean the navigation is functionally invisible to anything that reads HTML: crawlers, AI agents, link checkers, a browser with JavaScript disabled.

Thirty-two routes had no crawlable inbound link anywhere on the site. That included every calculator on the site — the pages most likely to earn a link from someone else, and the ones nothing pointed to.

The fix is unglamorous

Render real anchors, and keep the panels mounted while hiding them with CSS rather than unmounting them. invisible opacity-0 pointer-events-none gives the same visual result and leaves the markup present. On the site above that took the homepage from two crawlable links to forty-eight.

How to check yours

Fetch your homepage without executing JavaScript and count href attributes. If the count is far below what you see in a browser, your navigation is decoration.

← All notes