You moved to Shopify because it was supposed to handle the technical side. Then you search for your own best seller and it isn't there. Or Google shows an odd-looking address with /collections/ in the middle. Or a product has been out of stock since spring and still collects clicks.
Each one costs you visits you already paid to set up.
Shopify does take care of a lot. It does not take care of all of it. This post is the audit I'd run on a store in an afternoon: open this screen, check this setting, here's what good looks like, here's how to confirm it worked.
A note on how sure I am of each step. The Google parts come from Google's own documentation, which I opened and linked. The Shopify parts come from Shopify's own help center and developer docs as they appeared in search results in October 2026, and I couldn't open those pages directly. Shopify renames screens often, so where a menu path comes with an "as of October 2026" tag, click through it in your own admin before you trust it. Nothing here guarantees a ranking. Google says plainly that being eligible for a rich result is not a promise it will show.
This is the second post in a short series on store SEO. If you run WooCommerce instead, the first in this series covers that platform.
The quick answer: five checks that find most store problems
- Verify the store in Google Search Console and submit `sitemap.xml`. If Google isn't reporting on your store, you're guessing.
- Open one product at its `/collections/.../products/...` address and view the source. Confirm the canonical tag points at the plain
/products/...address. - Run your top product URL through [Google's Rich Results Test](https://search.google.com/test/rich-results). You want one Product block with a price and currency, and no duplicates from an app.
- List your installed apps and delete the ones you don't use. Then check the theme for the code they left behind.
- Connect the Google & YouTube app and open the Needs attention tab in Merchant Center. Fix mismatched prices and missing barcodes first.
What Shopify does for you, and what's still on you
Here's the split, as far as the documentation shows it. Details are in the sections below.
Job | What Shopify does (as of October 2026) | What you still check |
|---|---|---|
Sitemap | Generates sitemap.xml for your domain and updates it when you add products, collections, pages or posts | Submit it in Search Console, make sure nothing important is missing |
Canonical tags | Adds them automatically to avoid duplicate content | Confirm the collection-path product URLs resolve to the right one |
robots.txt | Generates one for every store | Only edit it if you have a real reason |
Product markup | Themes can output Product schema from the product | Test it, and make sure no app adds a second copy |
Titles and descriptions | Gives you fields to fill in | Fill them in, one unique pair per page |
Redirects | Gives you a redirect tool | Use it when a URL changes or a product is deleted |
The sitemap and canonical claims come from Shopify's SEO overview and sitemap help page. The robots.txt claim comes from the same overview.
1. Connect Search Console and submit the sitemap
What it is. Google Search Console is the free report card for how Google sees your store. Every other check in this post gets easier once it's set up.
Where to check. Shopify's help center says to verify your domain first, add it as a URL-prefix property, paste the verification meta tag into the theme's theme.liquid file, then open Indexing > Sitemaps in Search Console and enter sitemap.xml (as of October 2026, per Shopify's sitemap help page). It also says Google can't read the sitemap while the store is in private (password) mode.
Google's own verification page adds a choice. A Domain property covers every protocol and subdomain, but it can only be verified with a DNS record. A URL-prefix property covers only the exact address you type. If you can edit your DNS, the Domain property is the more complete one.
What good looks like. The sitemap shows as "Success" in the Sitemaps report. Google describes a sitemap as a hint, not a command, and says it should list the canonical URLs you want in search results.
How to fix it. Verify, submit, wait. If you launched with the store in private mode, resubmit after you take the password off.
How to confirm. Open yourstore.com/sitemap.xml in a browser. You should see links to child sitemaps for products, collections, pages and blogs. Then open Search Console's Page indexing report, which Google describes as the list of which URLs are indexed and why the rest aren't.
2. Read the Page indexing report like a to-do list
What it is. The report that tells you, URL by URL, why a page isn't in Google.
Where to check. Search Console, Indexing > Pages. Look at the "Why pages aren't indexed" table. Google's report help explains each reason. These are the ones that matter on a store:
- Duplicate without user-selected canonical. Google picked a different URL as the main one. Normal, unless it picked the wrong one.
- Alternate page with proper canonical tag. The page points at another page that is indexed. No action needed.
- Crawled, currently not indexed. Google looked and didn't add it. Google says it may be indexed later and there's no need to resubmit.
- Discovered, currently not indexed. Google knows the URL and hasn't crawled it yet.
- Soft 404. The page says "not found" but returns a success code.
- URL marked 'noindex' and URL blocked by robots.txt. Check these aren't hitting products you want to sell.
What good looks like. Your real product and collection pages are indexed. The "not indexed" pile is mostly duplicates and old URLs you meant to retire. Google's own words: don't expect every URL to be indexed.
How to confirm one page. Paste its URL into the top bar to open the URL Inspection tool. It shows the canonical you declared and the one Google selected. If they differ, you have a duplicate-URL problem. Use Test live URL after a fix. "Request indexing" asks Google to crawl, but it doesn't guarantee indexing and has a daily limit.
3. The duplicate product URL problem
What it is. On a Shopify store a product can often be reached two ways: /products/blue-shirt and /collections/shirts/products/blue-shirt. Same page, two addresses. Google explains the cost: duplicates can split signals and waste crawling.
What Shopify says. Shopify's help center says it adds canonical tags automatically to prevent duplicate content in search results. Its developer docs say a theme sets a page's canonical through the global Liquid canonical_url object (Shopify's SEO metadata docs, as of October 2026).
Where I'm not sure. I couldn't find a Shopify page that spells out exactly which URL the canonical points to for a collection-path product address. A Shopify developer-forum poster reports that these collection-path URLs can still be indexed even with canonicals in place. That is one user's report, not Shopify's documentation. So test your own store instead of assuming.
How to check.
- Open a product from inside a collection, so the address has
/collections/in it. - Right-click, View page source, and search for
rel="canonical". - The address in that tag should be the plain
/products/...version, spelled the way you want it to appear in Google. - In Search Console, inspect the collection-path URL. Compare User-declared canonical and Google-selected canonical.
What good looks like. Both point at the same single address. Google lists redirects and canonical tags as strong signals, with sitemaps as a weak one, and that the canonical page should have a self-referencing canonical too.
How to fix it. If the canonical is right and Google agrees, leave it alone. If it's wrong, it comes from the theme, so it's a developer fix in the theme code. Also check your internal links: Google says keep internal links pointing at the canonical URL. If your theme's collection grids link to the collection-path version, that's worth a developer's time.
4. robots.txt: leave it alone unless you have a reason
What it is. A file at yourstore.com/robots.txt that tells crawlers which paths not to fetch. Google is clear that robots.txt manages crawling, and is not a way to keep a page out of Google. To keep a page out, you use noindex, and Google has to be able to crawl the page to see it.
Where to check. Open /robots.txt on your store and read it. Look for a Sitemap: line pointing at your sitemap.
How to edit it, if you must. Shopify's developer docs describe a robots.txt.liquid template. As of October 2026 the steps are:
- In the theme code editor, add a new template under Templates named
robots.txt.liquid. It can't be a JSON template. The help center's wording is Edit code > Add a new template > robots (Shopify's robots.txt page). - Before you publish, save a copy of your current
/robots.txt. Adding the template replaces the generated output (Customize robots.txt). - Shopify recommends looping over its default rule groups and adding or removing rules inside that loop, rather than pasting plain text.
- Compare the live
/robots.txtwith your saved copy afterward.
Shopify calls this an unsupported customization and says Support can't help with edits to the file. To undo it, delete the custom template.
What good looks like. The file is either Shopify's default, or the default plus a small number of rules you can explain.
One trap. Don't use robots.txt to hide a page you want gone from Google. Google says it can still show up, without a description, if other sites link to it.
5. Titles and meta descriptions
What it is. The title tag is the blue link in search. The meta description is the text under it. Google may rewrite either one, but a clear, unique one is your best shot at being shown as written.
Where to check. As of October 2026, per Shopify's help center:
- Products: open the product, find Search engine listing, click the pencil or Edit link.
- Collections: Products > Collections, open the collection, same section.
- Pages: Online Store > Pages, open the page, same section.
- Home page: Online Store > Preferences, the home page title and meta description fields.
The pages that describe these screens: adding keywords, collection settings and preferences.
What good looks like. One title and one description per page, none repeated, each describing that page. Google's title guidance says every page needs its own title, and warns about long titles that differ by only one detail. That's exactly what a store with 400 near-identical product names produces.
On length, the two sources disagree a little. Google says there is no limit on title length, but titles get truncated to fit the device. Shopify's help pages suggest titles around 60 characters and descriptions around 160, and some pages quote 70 for titles. Aim for the lower numbers and move on.
How to fix it. Start with the pages that matter most: the home page, your top collections, your top 20 products. Write them by hand. Google's snippet guidance says you can generate descriptions programmatically on a large database-driven site, as long as they read well and aren't a wall of keywords.
How to confirm. Shopify's own suggestion is to view the page source and check that the title and meta description tags match what you typed. If they do, the setting is working.
6. Handles, redirects and products you've removed
What it is. The handle is the last part of the URL. Change it, delete the product, or retire a collection, and the old address breaks. Broken addresses mean lost visits and lost links.
Where to check. Shopify's help center says that on a collection you edit the handle in Search engine listing, and that the editor offers an option to create a redirect from the old URL. Shopify also warns not to change handles often, because the collection might stop showing in search results. Leave the redirect option ticked (as of October 2026, per collection settings).
For a redirect you create yourself, Shopify's help center describes Content > Menus > View URL Redirects > Create URL redirect. Enter the old path in Redirect from and the new one in Redirect to (URL redirects help page). Older articles call this area Online Store > Navigation, so look in both. Three limits from that page:
- Redirects only work from URLs that are broken. If the old URL still loads a page, the redirect won't fire.
- You can't redirect from fixed paths like
/products,/collectionsor/collections/all. - Shopify's own example is a deleted discontinued product redirected from its
/products/address to a related collection.
What Google wants. For a page that moved, use a permanent redirect (301 or 308) to the new address. For a page that's gone for good, Google treats 404 and 410 the same way: the page drops out of the index over time. A 404 on purpose isn't a problem, according to Google's Page indexing help. A page that says "not found" but returns a success code is a soft 404, which is the one to avoid.
How to decide, product by product.
Situation | What to do |
|---|---|
Temporarily out of stock, coming back | Keep the page up and show the stock status honestly |
Replaced by a newer or near-identical product | Redirect the old URL to the new product |
Discontinued, with a close category | Redirect to that collection, as Shopify's example does |
Discontinued, nothing relevant to point to | Let it return a 404 |
My own rule on top of that: redirect only to a page that really replaces the old one. Sending every dead product to the home page helps nobody. The Google pages above support the redirect and 404 handling in the table; the keep-the-page row is common sense.
How to confirm. Shopify recommends typing the old address into a browser and checking that it lands on the new one. For a bigger cleanup, filter the Page indexing report for "Not found (404)" and "Page with redirect" and read the list.
A word on hiding products. If you want a product live but out of Google, Shopify's help center says setting the product to Unlisted hides it from internet search and the sitemap, and the page stays reachable by direct link. A metafield called seo.hidden set to 1 hides a product, page or post from search engines and the sitemap too (hide a page from search engines). Per that page, Shopify adds noindex and nofollow tags when you use the metafield. Archived products are described as hidden from the storefront. I couldn't confirm from search results what status code an archived product's old URL returns, so check one in a browser.
7. Collections are your landing pages. Products are the sale.
What it is. Most people search for a kind of thing ("waterproof hiking boots"), not a single product. Collection pages are where that search should land.
Where to check. Google's ecommerce site-structure guide says link to every product you want indexed from category pages, because Googlebot generally doesn't type into your search box. It also says Google relies more on links between pages than on URL structure to understand how your site is organized, and that linking a best seller from the home page, blog posts or newsletters can signal it matters.
What good looks like.
- Every collection has a title and a short description written for people, not the default.
- Every product you want to sell sits in at least one collection a shopper can click to.
- Your top collections are linked from the main menu and the home page.
- Collections have real intro text, not an empty page with a grid.
The pagination rule. For long collections, Google says each page gets its own URL, each page's canonical points at itself, and you shouldn't use page one as the canonical for every page. Google no longer uses rel="next" and rel="prev".
Filters. If your filters create URLs with parameters, read Google's faceted navigation guide. If you don't need filtered pages in search, Google says blocking the parameters in robots.txt works better long term than canonical tags. On Shopify that means the robots.txt.liquid route from section 4, so get a developer involved. If some filtered pages should rank, return a real 404 for combinations with no results.
How to confirm. In Search Console, open Performance > Search results, switch the table to Pages, and look for your collection URLs. If your best collections aren't in the list, Google isn't showing them yet.
8. Product structured data (and the duplicate-markup trap)
What it is. A block of code that tells Google "this page is a product, this is the name, price and stock status." Our plain-English guide to schema markup covers the basics.
What Google requires. Google splits product markup into product snippets and merchant listings. Merchant listings are for pages where people can buy. Here's what its merchant listing page asks for:
Property | Status for merchant listings |
|---|---|
name | Required |
image | Required |
offers with price | Required, and the price must be greater than zero |
priceCurrency | Required with the price |
availability | Recommended, one value only |
brand, sku, GTIN, review, aggregateRating | Recommended |
shippingDetails, hasMerchantReturnPolicy | Recommended |
Two more rules from the same page. Put the markup in the HTML the server sends, because dynamically generated markup can make Shopping crawls "less frequent and less reliable." And your listing may not display if priceValidUntil is a date in the past. Google's general guidelines also say the markup must describe what's visible on the page, and every review you mark up should be visible.
What Shopify does. Shopify's Liquid reference describes a structured_data filter that converts a product into schema.org markup. A product with no variants becomes a Product; one with variants becomes a ProductGroup. The documented use is {{ product | structured_data }} inside a JSON-LD script tag (shopify.dev, as of October 2026). Shopify's theme-store requirements also say themes must include Google's rich product snippets. Whether your theme uses that filter or its own code depends on the theme, so look.
Google's variant markup page says each variant needs a unique sku or gtin, and that each variant must be selectable through its own URL with query parameters.
The trap. A Shopify community thread reports a Search Console warning where the theme and an SEO app each output a Product block. The poster's conclusion was that one of them has to go. That's a user report, not Shopify guidance, but it matches how Google's tools behave: two competing blocks make the test noisy. If you've installed an SEO or reviews app, this is the first thing to check.
How to check.
- Open Google's Rich Results Test, paste a product URL, and run it. Google's testing guidance says to fix critical errors, and that warnings only limit how a result looks.
- Count the Product items it finds. You want one.
- Check that the price, currency and availability match what you see on the page.
- Test a product with variants and one without.
- After Google has crawled the pages, open Search Console and look for the Merchant listings report. The rich results report help says merchant listing reports live under Shopping.
What good looks like. One Product or ProductGroup, a price above zero, a currency, availability that matches the page, no critical errors.
How to fix it. If it's two blocks, find which app or theme file writes the second one and turn it off there. If the price is wrong, it's usually a variant-selection or currency-app issue, and that's a developer job.
9. Images, alt text and speed
Image alt text. Google's image guidelines call alt text the most important image metadata, ask for descriptive and contextual text without keyword stuffing, and say Google doesn't index CSS background images. Use real img elements. Descriptive file names help too.
In Shopify, per the help center (as of October 2026): open the product, open a media item's preview, click Add alt text, enter it and save. The maximum is 512 characters and 125 or fewer is recommended. Alt text can also be uploaded in bulk with a CSV (add alt text).
Describe the image the way you'd describe it to someone on the phone. "Navy waterproof hiking boot, side view, on a gravel trail." Not "boots best hiking boots buy boots."
Speed. Google's Core Web Vitals page lists the targets: LCP within 2.5 seconds, INP under 200 milliseconds, CLS under 0.1. Google says it recommends good Core Web Vitals for success with Search. It doesn't say how much weight they carry, and neither will I. Our Core Web Vitals post covers what they mean in plain English.
Where to check. Search Console has a Core Web Vitals report. PageSpeed Insights tests one URL at a time. Shopify's help center says your theme, your installed apps and any extra third-party code are the biggest factors in how fast your store loads, and describes an online store speed report in the admin.
Apps and leftover code. Shopify's docs say uninstalling an app doesn't automatically remove its code from your theme. Apps often inject script tags, stylesheet links or Liquid snippets. Shopify's developer guide to auditing and removing third-party scripts says to:
- Search your theme files for the app's name or script domain.
- Check
layout/theme.liquidfor injected script tags. - Look in the
snippetsfolder for app-named files. - Look for
{% render %}or{% include %}tags pointing at snippets that no longer exist.
Back up the theme before you touch it. Duplicate it, work on the copy, and only publish when the copy tests clean.
How to confirm. Run PageSpeed Insights on the home page, one collection and one product, before and after. Write the three scores down. Shopify's speed report marks app installs and uninstalls on a timeline, but it says those events may or may not affect the score, so measure instead of assuming.
10. Google & YouTube app and Merchant Center
What it is. Merchant Center is where Google keeps your product data. Google says free listings can show your products across Search, Maps, Shopping, Images and more at no cost, but that being eligible doesn't guarantee they show.
Where to check. Shopify's help center says to install the Google & YouTube channel, connect a Google account, then select or create a Merchant Center account and verify it. After setup, products available to your online store sync automatically. For eligible U.S. stores, synced products can appear in free listings, and you can confirm the feed is opted in to free product listings (Shopify's connect page, syncing products).
Things Shopify's pages warn about, as of October 2026:
- The Google email connected in the channel needs Admin access on the Merchant Center account.
- Connecting an existing Merchant Center account can overwrite an existing product feed.
- Only shipping rates from the General shipping profile sync.
- A "Missing GTIN or MPN" error means adding a barcode, or a brand and MPN.
- Google reviews new products within a few business days of the first sync.
Google's free listings page also says you need return policy and shipping information, and the basic attributes: ID, title, link, image link, price, description and availability.
What good looks like. In Merchant Center, the Needs attention tab under Products is empty or close to it. Google's issues help page separates warnings (products keep showing, performance may be limited) from disapprovals (products stop showing until fixed).
The two errors that cost the most. Google's mismatched price and mismatched availability help pages say Googlebot compares your product data to the price and availability in the page HTML. If JavaScript adds the price after the page loads, Google may see a mismatch. Causes include timing gaps between site and feed updates, wrong structured data, and sale price dates or time zones.
Two Google rules worth repeating. Don't set availability to out_of_stock to hide a product temporarily, because Google says to use the pause attribute for up to 14 days. And a lot of mismatches can get an account suspended. After you fix one, Googlebot rechecks automatically over hours or days, or you can request a review.
How to fix it. Fix the price or availability at the source (the product, the variant, the currency app), then let the feed catch up. In Merchant Center, go to Products > Needs attention, filter for the issue, and work through the list.
How to confirm. Open one flagged product in Merchant Center and compare its final attributes to the live page for the same variant. Then look at the Rich Results Test output from section 8. If the page markup, the page itself and the feed all agree, you're done.
A note on ads. Merchant Center data can also feed Shopping ads. We run ads (Google Ads, Microsoft Ads and others) only for clients on our SEO plans, because good pages come first. If that's where you're headed, here's how it works. Free listings need none of it.
11. The blog, and what to write on a store
What it is. Collections answer "what do you sell." A blog answers "how do I choose" and "how do I fix it." Shopify's sitemap includes blog posts too, per its sitemap page.
Where to check. Shopify's help center says the post title is used to generate the page's H1, and gives blog titles and descriptions the same search engine listing fields as everything else. It suggests informational posts run at least 500 words. Treat that as a floor to clear, not a target.
What good looks like. Each post answers one real question a buyer asks you (sizing, care, compatibility, "which one do I need"), links to the product or collection it helps with, and doesn't copy a supplier's text. Google's spam policies call out thin affiliate pages whose product descriptions are copied from the merchant, and pages generated in bulk to manipulate rankings.
How to confirm. In Search Console's Performance report, switch the table to Pages and look for your blog URLs. See which ones get impressions, then make sure each links to the collection or product it should be selling.
The 15-minute triage
If you only have a quarter of an hour:
- Minute 1-3. Open
/sitemap.xmland/robots.txton your store. Both load, the sitemap is there, nothing odd in robots.txt. - Minute 4-6. In Search Console, open Indexing > Pages. Note the top three "not indexed" reasons and their counts.
- Minute 7-9. Inspect one product URL from inside a collection. Compare user-declared and Google-selected canonical.
- Minute 10-12. Run that product through the Rich Results Test. One Product block, price, currency, availability.
- Minute 13-14. List your apps. Circle every one you don't recognize or haven't used this quarter.
- Minute 15. Open Merchant Center's Needs attention tab. Write down the count.
That's a baseline. Fix in this order: broken or missing indexing, wrong canonicals, markup errors, mismatches, then apps and speed.
When to get help
Do the titles, descriptions, alt text and app cleanup yourself. Bring in a developer or an SEO partner when:
- Search Console shows thousands of filter or duplicate URLs and the fix means editing
robots.txt.liquidor theme code. - The Rich Results Test shows two Product blocks, or a wrong price, and you can't find where it comes from.
- You're moving platforms and need every old product URL redirected, with a list of what maps where.
- Merchant Center keeps flagging mismatches after you've fixed the data.
If you'd like a second set of eyes on your store, our SEO service covers this kind of audit, or you can get in touch directly.
Related reading
- E-Commerce SEO: Why Your Product Pages Aren't Ranking (and How to Fix Them)
- WooCommerce Products Not Showing on Google? A 12-Step Settings Audit
- Google Search Console for Small Business: Find Out Why You're Not on Google
- Does My Small Business Website Need Schema Markup? What to Actually Do
- Is My Slow Website Hurting My Google Rankings?
- Technical SEO for Small Businesses: 7 Checks You Can Run in an Hour






No comments yet