<?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: Jeffrey Del Rosario</title>
    <description>The latest articles on DEV Community by Jeffrey Del Rosario (@jeffrey_delrosario_d666a).</description>
    <link>https://dev.to/jeffrey_delrosario_d666a</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%2F4126487%2Fa15ca41c-ca16-465f-b7ae-e443633e77b1.jpg</url>
      <title>DEV Community: Jeffrey Del Rosario</title>
      <link>https://dev.to/jeffrey_delrosario_d666a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jeffrey_delrosario_d666a"/>
    <language>en</language>
    <item>
      <title>How We Tackled 1,600 “Crawled – Currently Not Indexed” URLs on Shopify</title>
      <dc:creator>Jeffrey Del Rosario</dc:creator>
      <pubDate>Tue, 15 Sep 2026 14:58:50 +0000</pubDate>
      <link>https://dev.to/jeffrey_delrosario_d666a/how-we-tackled-1600-crawled-currently-not-indexed-urls-on-shopify-184a</link>
      <guid>https://dev.to/jeffrey_delrosario_d666a/how-we-tackled-1600-crawled-currently-not-indexed-urls-on-shopify-184a</guid>
      <description>&lt;p&gt;If you manage a large Shopify store, Google Search Console can occasionally show you a number that looks much worse than it actually is.&lt;/p&gt;

&lt;p&gt;For us, that number was roughly &lt;strong&gt;1,600 URLs&lt;/strong&gt; under:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Crawled – currently not indexed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At first glance, the obvious reaction is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We need to get all 1,600 pages indexed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That turned out to be the wrong goal.&lt;/p&gt;

&lt;p&gt;The more useful question was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which of these URLs actually deserve to be indexed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That distinction changed how we approached the entire problem.&lt;/p&gt;

&lt;p&gt;This article explains the workflow we used to audit the affected URLs, identify patterns, prioritize important pages, and avoid wasting time trying to force low-value URLs into Google's index.&lt;/p&gt;

&lt;h2&gt;
  
  
  What “Crawled – currently not indexed” actually tells you
&lt;/h2&gt;

&lt;p&gt;The important word here is &lt;strong&gt;crawled&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Google already discovered the URL and successfully requested it.&lt;/p&gt;

&lt;p&gt;So this is different from a discovery or accessibility problem.&lt;/p&gt;

&lt;p&gt;The page was crawled, but Google decided not to include it in the index at that point.&lt;/p&gt;

&lt;p&gt;That does not automatically mean something is technically broken.&lt;/p&gt;

&lt;p&gt;A URL can be perfectly accessible and still not be worth indexing.&lt;/p&gt;

&lt;p&gt;For an e-commerce store, this distinction matters because one product catalog can generate many different types of URLs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;product pages&lt;/li&gt;
&lt;li&gt;collection pages&lt;/li&gt;
&lt;li&gt;blog posts&lt;/li&gt;
&lt;li&gt;parameter URLs&lt;/li&gt;
&lt;li&gt;filtering variations&lt;/li&gt;
&lt;li&gt;pagination&lt;/li&gt;
&lt;li&gt;outdated products&lt;/li&gt;
&lt;li&gt;near-duplicate pages&lt;/li&gt;
&lt;li&gt;utility pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Treating all of them as equally important creates a lot of unnecessary work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our situation
&lt;/h2&gt;

&lt;p&gt;The issue appeared while working on &lt;strong&gt;&lt;a href="https://myseeds.de/" rel="noopener noreferrer"&gt;MySeeds&lt;/a&gt;&lt;/strong&gt;, a Shopify store with more than 1,000 products.&lt;/p&gt;

&lt;p&gt;Google Search Console showed roughly 1,600 URLs in the “Crawled – currently not indexed” bucket.&lt;/p&gt;

&lt;p&gt;Instead of inspecting them randomly one by one, we exported the URLs and started looking for patterns.&lt;/p&gt;

&lt;p&gt;That was the first useful breakthrough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Group URLs before investigating them
&lt;/h2&gt;

&lt;p&gt;An export containing 1,600 URLs looks intimidating.&lt;/p&gt;

&lt;p&gt;But 1,600 individual problems rarely means there are 1,600 different causes.&lt;/p&gt;

&lt;p&gt;Most large indexing problems are really &lt;strong&gt;a handful of patterns repeated hundreds of times&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We started by grouping URLs based on their structure.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/products/
/collections/
/blogs/
/pages/
?sort_by=
?filter=
?page=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can automate much of this classification with a simple script.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;urllib.parse&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;urlparse&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gsc-urls.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;classify_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;parsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;urlparse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;
    &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/products/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/collections/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Collection with parameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Collection&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/blogs/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Blog&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/pages/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Other parameter URL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;URL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;classify_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact script is not important.&lt;/p&gt;

&lt;p&gt;The principle is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Turn a large URL problem into several smaller pattern problems.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once we did that, the report became much easier to reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Decide whether each URL type should be indexed at all
&lt;/h2&gt;

&lt;p&gt;Before trying to “fix” a URL, we asked:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If Google indexed this page tomorrow, would we actually want it appearing in search results?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question immediately eliminates a lot of noise.&lt;/p&gt;

&lt;p&gt;We used a decision model similar to this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;URL type&lt;/th&gt;
&lt;th&gt;Usually index-worthy?&lt;/th&gt;
&lt;th&gt;Typical action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Important product&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Investigate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main collection&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Investigate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Useful article&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Investigate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Core informational page&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Investigate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sort URL&lt;/td&gt;
&lt;td&gt;Usually no&lt;/td&gt;
&lt;td&gt;Leave excluded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter variation&lt;/td&gt;
&lt;td&gt;Usually no&lt;/td&gt;
&lt;td&gt;Check canonical/indexing setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate URL&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Consolidate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Empty/thin collection&lt;/td&gt;
&lt;td&gt;Maybe not&lt;/td&gt;
&lt;td&gt;Improve, merge or remove&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discontinued product&lt;/td&gt;
&lt;td&gt;Depends&lt;/td&gt;
&lt;td&gt;Redirect, retain or remove deliberately&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is where the original number started becoming much less scary.&lt;/p&gt;

&lt;p&gt;The objective was never:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indexed URLs = maximum possible&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The objective was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important URLs = discoverable, crawlable, canonical and useful enough to index&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those are very different goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Compare indexing signals
&lt;/h2&gt;

&lt;p&gt;For URLs that genuinely mattered, we looked for conflicting signals.&lt;/p&gt;

&lt;p&gt;A page might technically exist while sending Google mixed messages about whether it should be treated as the primary URL.&lt;/p&gt;

&lt;p&gt;We checked four things together:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internal links
      ↓
Preferred URL
      ↓
Canonical
      ↓
XML sitemap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ideally, all of them point toward the same URL.&lt;/p&gt;

&lt;p&gt;For example, imagine that a product can effectively be encountered as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/products/example-product
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while different navigation paths or parameters expose variants of that URL.&lt;/p&gt;

&lt;p&gt;If your sitemap references one version, internal links frequently point toward another, and canonical signals say something else, you are making Google's job harder than necessary.&lt;/p&gt;

&lt;p&gt;Canonicalization is not simply about inserting a canonical tag.&lt;/p&gt;

&lt;p&gt;It is about &lt;strong&gt;making your signals consistent&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Look at internal linking
&lt;/h2&gt;

&lt;p&gt;One of the easiest things to underestimate during an indexing audit is internal linking.&lt;/p&gt;

&lt;p&gt;A page may be technically accessible while being practically invisible inside the site architecture.&lt;/p&gt;

&lt;p&gt;We asked questions such as:&lt;/p&gt;

&lt;p&gt;How many internal links point to this page?&lt;/p&gt;

&lt;p&gt;Is it linked from a major collection?&lt;/p&gt;

&lt;p&gt;Can a visitor reach it naturally from the store navigation?&lt;/p&gt;

&lt;p&gt;Is it several layers deep?&lt;/p&gt;

&lt;p&gt;Does another page receive most of the relevant internal links instead?&lt;/p&gt;

&lt;p&gt;For important pages, we wanted Google to see clear evidence that the page was part of the primary site structure.&lt;/p&gt;

&lt;p&gt;This was particularly important for products, collections and informational content we actually wanted to rank.&lt;/p&gt;

&lt;p&gt;A sitemap can help Google discover a page.&lt;/p&gt;

&lt;p&gt;But a sitemap does not replace a good internal site architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Check whether the page actually adds value
&lt;/h2&gt;

&lt;p&gt;Technical SEO was only part of the investigation.&lt;/p&gt;

&lt;p&gt;Some URLs were technically fine.&lt;/p&gt;

&lt;p&gt;That did not necessarily make them useful.&lt;/p&gt;

&lt;p&gt;Consider two collection pages containing almost the same products, similar headings and very little unique context.&lt;/p&gt;

&lt;p&gt;Both can be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;200 OK
crawlable
indexable
self-canonical
included in the sitemap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And Google may still decide that only one is worth indexing.&lt;/p&gt;

&lt;p&gt;This is why we also reviewed page purpose.&lt;/p&gt;

&lt;p&gt;For important pages we looked at things like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Search intent
Unique content
Product selection
Page purpose
Internal links
Overlap with another page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In some cases, improving a page was appropriate.&lt;/p&gt;

&lt;p&gt;In others, the better solution was consolidation.&lt;/p&gt;

&lt;p&gt;And sometimes the correct decision was simply to stop worrying about that URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Keep the sitemap clean
&lt;/h2&gt;

&lt;p&gt;A sitemap is another useful prioritization signal.&lt;/p&gt;

&lt;p&gt;For a large store, we want it to represent pages we genuinely consider useful search destinations.&lt;/p&gt;

&lt;p&gt;That means we do not want to think about the sitemap as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here is every URL the platform is capable of producing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here are the canonical pages we believe search engines should discover and consider.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For important URLs, we checked whether the preferred version was represented consistently.&lt;/p&gt;

&lt;p&gt;This was especially useful after identifying duplicate or outdated URL patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Inspect samples, not every URL manually
&lt;/h2&gt;

&lt;p&gt;Manually inspecting 1,600 URLs would have been inefficient.&lt;/p&gt;

&lt;p&gt;Once we had clusters, we selected representative URLs from each group.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5 important products
5 secondary products
5 collections
5 blog articles
5 parameter URLs
5 older URLs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We then compared their behavior.&lt;/p&gt;

&lt;p&gt;If ten URLs sharing the same template show the same indexing pattern, investigating the template or URL type is generally more useful than repeating the exact same manual inspection hundreds of times.&lt;/p&gt;

&lt;p&gt;Of course, high-value pages still deserve individual attention.&lt;/p&gt;

&lt;p&gt;But large-scale SEO problems should usually be investigated &lt;strong&gt;pattern first, URL second&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we changed
&lt;/h2&gt;

&lt;p&gt;After the audit, the work became much more targeted.&lt;/p&gt;

&lt;p&gt;Instead of attempting to push every excluded URL into Google, we focused on four areas:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Index-worthy pages:&lt;/strong&gt; important products, collections and content that should genuinely be searchable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consolidation:&lt;/strong&gt; URLs that duplicated another page or competed with a stronger destination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Internal linking:&lt;/strong&gt; pages that deserved more visibility inside the site architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content quality:&lt;/strong&gt; pages whose purpose or differentiation was not strong enough.&lt;/p&gt;

&lt;p&gt;That also meant intentionally leaving some URLs unindexed.&lt;/p&gt;

&lt;p&gt;And that is perfectly fine.&lt;/p&gt;

&lt;p&gt;Google Search Console itself distinguishes between URLs that are not indexed because of a problem and URLs that simply do not need to be indexed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we deliberately did not do
&lt;/h2&gt;

&lt;p&gt;We did not repeatedly submit hundreds of URLs through URL Inspection hoping Google would eventually accept them.&lt;/p&gt;

&lt;p&gt;We did not assume that every non-indexed URL represented lost traffic.&lt;/p&gt;

&lt;p&gt;And we did not create extra text just to make every page longer.&lt;/p&gt;

&lt;p&gt;Those approaches address the number displayed in Search Console rather than the underlying website architecture.&lt;/p&gt;

&lt;p&gt;Our goal was to improve the set of pages Google had good reasons to index.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most important lesson
&lt;/h2&gt;

&lt;p&gt;The biggest lesson from the project was surprisingly simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indexing is not a numbers game.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Having 10,000 indexed URLs is not necessarily better than having 3,000.&lt;/p&gt;

&lt;p&gt;What matters is whether the right 3,000 pages are indexed.&lt;/p&gt;

&lt;p&gt;When a large e-commerce site shows hundreds or thousands of excluded URLs, start with classification.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What type of URL is this?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should this type of URL be indexed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Only after answering those questions should you investigate why an individual page is missing from the index.&lt;/p&gt;

&lt;p&gt;That approach turns a Search Console report containing thousands of URLs into a manageable technical SEO project.&lt;/p&gt;

&lt;h2&gt;
  
  
  A reusable workflow
&lt;/h2&gt;

&lt;p&gt;Our current process can be summarized as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Export affected URLs
        ↓
Group by URL pattern
        ↓
Decide which groups deserve indexing
        ↓
Inspect representative samples
        ↓
Check canonical + sitemap + internal links
        ↓
Evaluate content and search intent
        ↓
Fix patterns instead of individual URLs
        ↓
Monitor Search Console
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Shopify stores in particular, this is much more scalable than treating every URL as an independent SEO problem.&lt;/p&gt;

&lt;p&gt;And perhaps more importantly, it prevents you from spending weeks trying to index pages that Google never needed in the first place.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>seo</category>
      <category>ecommerce</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
