Uncrawlable JavaScript Links Example
My finest passage lies behind a bear who must first be lit from the inside with two flints.
The short answer
- What it is
- An uncrawlable JavaScript link navigates through script instead of a real address. Examples are a javascript: href, a navigating onclick, or an href on an element that isn't a link.
- Why it matters
- Search engines discover URLs from real anchor tags with an href. Script-only links can leave whole pages unseen.
- How a crawler should report it
- Report one row per element with the source page, the tag name, and the attribute found, such as onclick or a javascript: href. Don't flag javascript:void(0) on a control like a menu toggle, since it does not navigate.
- Live examples
/lab/uncrawlable-links/(positive)/lab/uncrawlable-links/near-miss/(near miss)

Link Markup That Search Bots Can Actually Follow
Uncrawlable JavaScript links look like links to a person but not to a bot. Google's guidance is clear on what works. It follows an <a> element with an href that holds a real URL. It does not follow <a onclick="goTo('/page/')"> or <a href="javascript:goTo('/page/')">. It also doesn't treat <span href="/page/"> as a link, because that element has no such attribute in HTML.
These patterns mostly come from app frameworks and old habits. A developer attaches a click handler to a div or a button and uses the router to change the page. A card component may be clickable with no link inside. Older sites used javascript: links for pop-ups. Some menus only add their links after a hover or a click. That means a crawler that doesn't interact with the page will never see them.
A browser runs the script, so a person gets to the next page as expected. Yet the same design hurts them too. They can't open the link in a new tab, copy its address, or see where it leads. Keyboard users and screen readers may not be able to reach it. Search engines can render JavaScript, but they don't click things. A URL that only exists after a click may stay out of the index unless another path leads to it.
To detect the issue, scan the rendered DOM for javascript: hrefs, navigating onclick handlers, and href attributes on the wrong elements. Compare the URLs a bot finds with those a person can reach. To fix it, use a real <a href="/page/"> and let your router handle the click. Most frameworks have a link component that does this. Keep button elements for actions that don't change the URL. Then crawl again and check that those pages now appear.