<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: TechEnthu</title>
    <description>The latest articles on DEV Community by TechEnthu (@techenthu).</description>
    <link>https://dev.to/techenthu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4166371%2F40d11947-fb00-440b-8ce1-bacc99f883c7.png</url>
      <title>DEV Community: TechEnthu</title>
      <link>https://dev.to/techenthu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techenthu"/>
    <language>en</language>
    <item>
      <title>Why Google ignored my React SPA tool site for weeks (and what I changed)</title>
      <dc:creator>TechEnthu</dc:creator>
      <pubDate>Tue, 06 Oct 2026 13:39:02 +0000</pubDate>
      <link>https://dev.to/techenthu/why-google-ignored-my-react-spa-tool-site-for-weeks-and-what-i-changed-124h</link>
      <guid>https://dev.to/techenthu/why-google-ignored-my-react-spa-tool-site-for-weeks-and-what-i-changed-124h</guid>
      <description>&lt;p&gt;I build small browser-based tools as a solo developer. My latest one, &lt;a href="https://pinfetcher.com" rel="noopener noreferrer"&gt;PinFetcher&lt;/a&gt;, is a Pinterest downloader suite built as a single-page app. The tools worked fine. Google, however, barely noticed the site existed.&lt;/p&gt;

&lt;p&gt;Weeks in, Search Console showed the same picture: a handful of URLs indexed and a couple dozen sitting at &lt;strong&gt;"Discovered - currently not indexed"&lt;/strong&gt; with &lt;em&gt;Last crawl: N/A&lt;/em&gt;. Not "crawled and rejected". Never even fetched.&lt;/p&gt;

&lt;p&gt;Here's what I checked, what I changed, and what I'd tell myself on day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, rule out the technical stuff
&lt;/h2&gt;

&lt;p&gt;Before blaming "authority", I verified the boring things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The pages return 200 and aren't blocked in &lt;code&gt;robots.txt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No stray &lt;code&gt;noindex&lt;/code&gt; in the rendered HTML or headers.&lt;/li&gt;
&lt;li&gt;The URL Inspection live test fetches the page fine.&lt;/li&gt;
&lt;li&gt;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.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If all of that is clean and pages are still "Discovered - not indexed", the problem is usually crawl priority, not a bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  The SPA-specific problem: links that only exist after JavaScript
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;What I changed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Real &lt;code&gt;&amp;lt;a href&amp;gt;&lt;/code&gt; links in the raw HTML&lt;/strong&gt; from the homepage to every tool and every blog post. Not &lt;code&gt;onClick&lt;/code&gt; handlers or router-only navigation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core content in the initial HTML&lt;/strong&gt;, so a page makes sense before any script runs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-referencing canonicals&lt;/strong&gt; on every page, so there's no ambiguity about the preferred URL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal links between related tools&lt;/strong&gt;, so no page is an orphan.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can check your own site in ten seconds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://your-site.com | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;a [^&amp;gt;]*href="[^"]*"'&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that returns almost nothing, crawlers that don't execute JS see an empty navigation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sitemap hygiene that's easy to get wrong
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't stamp every URL with the same &lt;code&gt;&amp;lt;lastmod&amp;gt;&lt;/code&gt;.&lt;/strong&gt; Mine were all identical from the day I generated the sitemap. Google learns to ignore &lt;code&gt;lastmod&lt;/code&gt; if it's not trustworthy, so use real change dates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove duplicates.&lt;/strong&gt; I had a batch of short-URL variants listed alongside the canonical ones.&lt;/li&gt;
&lt;li&gt;Keep it to canonical, indexable URLs only.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What did &lt;em&gt;not&lt;/em&gt; help
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hammering "Request Indexing."&lt;/strong&gt; It's rate-limited and doesn't override crawl priority. Submit once, then stop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repeated tiny site tweaks.&lt;/strong&gt; Each change resets your patience, not Google's schedule. Make the fixes, then leave it alone.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What does move the needle: being linked to
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;My current checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[x] Raw-HTML internal linking&lt;/li&gt;
&lt;li&gt;[x] Clean canonicals and sitemap&lt;/li&gt;
&lt;li&gt;[x] About / Contact / Privacy / DMCA pages so the site looks like a real product&lt;/li&gt;
&lt;li&gt;[ ] Earn external links to individual tool pages (in progress)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'll post an update once Search Console moves, and I'll be straight about it if it doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Verify with the URL Inspection live test, not just the index report.&lt;/li&gt;
&lt;li&gt;For SPAs, put crawlable &lt;code&gt;&amp;lt;a href&amp;gt;&lt;/code&gt; links and core content in the raw HTML.&lt;/li&gt;
&lt;li&gt;Keep your sitemap honest: real &lt;code&gt;lastmod&lt;/code&gt;, canonical URLs only.&lt;/li&gt;
&lt;li&gt;Stop poking Search Console and make the site worth linking to.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>react</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
