01What the status actually means
Google Search Console separates two very different problems under similar-sounding names. "Crawled – currently not indexed" means Googlebot fetched the page, looked at it, and decided it was not worth indexing. That is a content quality signal. "Discovered – currently not indexed" means Googlebot never really crawled it at all — it found the URL in a sitemap or a link and put it in a queue it has not committed budget to.
The distinction matters because the fixes are opposite. The first is a content problem. The second is almost always a technical or architectural one, and no amount of rewriting will move it.
Discovered but not crawled is a crawl-budget decision. Google is telling you it does not think the URL is worth the request.
02The four causes worth checking, in order
I work through these in sequence because the first one invalidates the rest. There is no point auditing content on a page that returns nothing.
- The page renders empty without JavaScript. Client-rendered single-page apps ship an empty container and rely on Google executing the bundle. Google will do that, but it queues rendering separately and deprioritises it for domains with little authority.
- Assets fail to load. This is the one people miss. If the bundle 404s, the page is blank even to a crawler that executes JavaScript — and it looks identical to a working page in the HTML source.
- Metadata is duplicated. If twenty URLs return the same title and description, Google reasonably concludes they are the same document and picks one.
- No internal links point at the page. A sitemap tells Google a URL exists. Internal links tell Google it matters. Sitemap-only URLs sit in the discovered queue for a long time.
03How to diagnose it in two commands
Stop looking at the page in your browser. Your browser is not the crawler. Fetch the URL the way a crawler does and read what actually comes back.
The first command shows you the raw HTML. If the body is an empty container, cause one applies. The second command extracts the script tag and checks whether that asset actually resolves — this is the step that catches broken asset paths.
On my own portfolio the second command returned a 404. Every project URL was loading its bundle from a relative path, so from a nested route like /projects/some-slug the browser resolved it to /projects/assets/index.js, which did not exist. Nineteen pages were blank white screens in production and had been for weeks. The HTML source looked perfectly healthy.
A relative asset base path is invisible on your homepage and fatal on every nested route. Check the deep pages, never just the root.
04The fixes that actually moved the needle
Absolute asset paths first — that turned nineteen blank pages into working ones. Then static rendering, so every URL returns complete HTML with its own title, description and canonical, and Google never has to queue a render. Then internal linking: a hub page listing every case study, a link-rich footer on every page, and related-work blocks on each detail page.
That last one is underrated. Before the change, my project pages were only reachable through a tabbed interface that rendered a link to one project at a time. Eighteen of nineteen case studies had zero inbound links from anywhere on the site. Adding a proper hub page and cross-links took each one from zero to between three and thirty inbound links.
- Set the build base path to absolute so nested routes resolve their assets.
- Statically generate or server-render every route — complete HTML, no rendering queue.
- Give every URL a unique title, description and canonical.
- Build hub pages and related-item blocks so nothing is orphaned.
- Return real 404 status codes. A rewrite that serves your 404 page with a 200 creates soft 404s.
05What to expect afterwards
Once the pages return real HTML and you request indexing in Search Console, individual URLs typically get indexed within one to seven days. A full site-wide recrawl settles over two to six weeks depending on your crawl budget.
Be honest with yourself about what this buys you. Technical SEO removes blockers. It does not create rankings. Once the pages are indexed, competing for commercial terms comes down to content depth and backlinks — and for a new domain, backlinks are the constraint.
Found this useful?
I write these from live project work. Follow along or get in touch if you want this kind of thinking applied to your product.