I build small browser-based tools as a solo developer. My latest one, PinFetcher, is a Pinterest downloader suite built as a single-page app. The tools worked fine. Google, however, barely noticed the site existed.
Weeks in, Search Console showed the same picture: a handful of URLs indexed and a couple dozen sitting at "Discovered - currently not indexed" with Last crawl: N/A. Not "crawled and rejected". Never even fetched.
Here's what I checked, what I changed, and what I'd tell myself on day one.
First, rule out the technical stuff
Before blaming "authority", I verified the boring things:
- The pages return 200 and aren't blocked in
robots.txt. - No stray
noindexin the rendered HTML or headers. - The URL Inspection live test fetches the page fine.
- No redirect loops. (I did find one broken route this way, and the live test reports it as "Redirect error", so always run the live test on every tool page.)
If all of that is clean and pages are still "Discovered - not indexed", the problem is usually crawl priority, not a bug.
The SPA-specific problem: links that only exist after JavaScript
In a client-rendered app, your navigation often only exists after React hydrates. Googlebot can render JS, but rendering is a second, deferred wave. If your homepage's raw HTML doesn't contain real links to your inner pages, you're making discovery depend on that second wave.
What I changed:
-
Real
<a href>links in the raw HTML from the homepage to every tool and every blog post. NotonClickhandlers or router-only navigation. - Core content in the initial HTML, so a page makes sense before any script runs.
- Self-referencing canonicals on every page, so there's no ambiguity about the preferred URL.
- Internal links between related tools, so no page is an orphan.
You can check your own site in ten seconds:
curl -s https://your-site.com | grep -o '<a [^>]*href="[^"]*"' | head -30
If that returns almost nothing, crawlers that don't execute JS see an empty navigation.
Sitemap hygiene that's easy to get wrong
-
Don't stamp every URL with the same
<lastmod>. Mine were all identical from the day I generated the sitemap. Google learns to ignorelastmodif it's not trustworthy, so use real change dates. - Remove duplicates. I had a batch of short-URL variants listed alongside the canonical ones.
- Keep it to canonical, indexable URLs only.
What did not help
- Hammering "Request Indexing." It's rate-limited and doesn't override crawl priority. Submit once, then stop.
- Repeated tiny site tweaks. Each change resets your patience, not Google's schedule. Make the fixes, then leave it alone.
What does move the needle: being linked to
A brand-new domain has no reason to be crawled often. The honest lever is other sites pointing at yours: genuine write-ups, directory listings, community posts, profile links. That's why I'm writing this post at all.
My current checklist:
- [x] Raw-HTML internal linking
- [x] Clean canonicals and sitemap
- [x] About / Contact / Privacy / DMCA pages so the site looks like a real product
- [ ] Earn external links to individual tool pages (in progress)
I'll post an update once Search Console moves, and I'll be straight about it if it doesn't.
Takeaways
- Verify with the URL Inspection live test, not just the index report.
- For SPAs, put crawlable
<a href>links and core content in the raw HTML. - Keep your sitemap honest: real
lastmod, canonical URLs only. - Stop poking Search Console and make the site worth linking to.
If you've shipped a client-rendered site and got through the "Discovered - currently not indexed" phase, what finally unstuck it for you? I'd like to hear it in the comments.
Top comments (0)