Skip to main content
SEO

Shopify Technical SEO Audit: Fix Redirects and Broken Links

A Shopify technical SEO audit for founders: find and fix dead product links, 302 redirects, broken images and extra H1s, in priority order, with how to verify.

November 4, 2026 19 min read Talha Butt.
Share

Shopify Technical SEO Audit: Fix Redirects and Broken Links

Quick answer: A Shopify technical SEO audit for broken links and redirects comes down to five checks, in this order: dead product or collection URLs that your own pages still link to, blog posts linking to unavailable products, temporary (302) redirects and redirect chains, broken or missing images, and extra H1 headings. Crawl the store, pull the not-found and redirect lists from Search Console, then fix by how many shoppers and links each URL touches. Use a 301 only when a close replacement exists, and let pages that are really gone return a real 404. The Google documentation I read does not describe any of these as a penalty, so treat them as lost shoppers and wasted links, not a ranking emergency.

Most technical SEO leaks on a Shopify store are quiet. A product is retired, but the blog post that recommended it still links there. A redirect meant to be permanent is not. A hero image is deleted from the Files page and the home page shows a blank box. Nothing looks broken when you click around your top products.

It is cheap SEO work, because every one of these URLs was already earned: someone linked to it, Google found it, or a shopper once landed on it. The leak is what happens when they arrive.

This guide is for the founder who owns the Shopify admin and Search Console but does not write code. Everything comes from public documentation from Google, Shopify and the tools named, read as at 31 October 2026. I am not going to promise a ranking or traffic outcome from any of it.

What you need before you start

  • Search Console access for your store’s domain. Shopify’s SEO overview tells you to add your domain there.
  • A crawler: software that follows your links the way a search engine would and records what each URL returns. Screaming Frog’s SEO Spider is one example. Its free version is limited to a maximum of 500 URLs each crawl, according to its FAQ, so a larger store needs the paid licence or a crawl split by section.
  • Shopify admin access to edit menus, products, posts, the theme and redirects, and a spreadsheet for one list of problem URLs.

Crawl gently. Google’s documentation treats a 429 as a signal that the server is overloaded, separately from the other 4xx errors, so a crawl full of 429s is not a list of broken pages: slow it down and rerun.

Why these leaks matter, and what Google does not say

Here is what the documentation says.

  • Google does not index a URL that returns a 4xx, and removes one that was indexed. That is correct for a page that is gone. It is a problem only when you wanted the page found.
  • A 404 is not automatically a problem. Google’s Page indexing help says it is not necessarily one if you removed the page with no replacement, and says to use a 301 if the page moved.
  • Soft 404s and long redirect chains cost crawling effort. Google’s crawl-budget guide says soft 404 pages “will continue to be crawled” and waste budget, and says to avoid long redirect chains.

What it does not say: that a handful of 404s drags down the rest of your site, or that one or five H1s changes a ranking. And the crawl-budget guide is written for large sites, with rough estimates of 1 million or more unique pages, or 10,000 or more with very fast-changing content. For other sites it calls a current sitemap and a check of the Page indexing report adequate. A store with a few hundred products is unlikely to have a crawl-budget problem.

So why bother? Because a shopper who lands on an error page has nowhere to go, every internal link to a dead page is a dead end you built, and redirect type is one of the signals Google uses to pick which address is the real one. None of that needs a ranking claim.

The set-up: one crawl, three exports

Do this once, then work every leak from the same spreadsheet.

  1. Crawl the store from the home page. In Screaming Frog, images are stored and crawled independently, so switch image crawling on if you want image response codes.
  2. Export from the crawler every URL returning a client error (4xx) and every URL returning a redirect (3xx), with the pages that link to each. Screaming Frog has an Inlinks column and a Bulk Exports menu for this. A list of broken URLs is not enough: the fix is usually on the page holding the link.
  3. Pull Search Console’s lists. Go to Indexing, then Pages, and open Not found (404), Page with redirect, Redirect error and Soft 404. The sitemap filter separates All submitted pages from Unsubmitted pages only. Google says the examples table is limited to 1,000 rows, so on a bigger store work one sitemap at a time.
  4. Check the Links report for dead URLs that other websites link to. Google says its tables are limited to 1,000 rows and the report is a sample, not every link.
  5. Add clicks from the Performance report’s Pages list, so you can see which problem URLs ever mattered.

One decision rule for every broken URL

Ask three questions in order:

  1. Does anyone arrive here? Clicks or impressions in Search Console, or links from other websites.
  2. Do we link here? The inlinks count from your crawl, including menus, collections, blog posts and emails.
  3. Is there an honest replacement? A page that gives the visitor what they were after, not merely a page that exists.

Replacement exists: redirect. No replacement, no visitors, no links: leave the 404 and remove your links. No replacement but people still arrive: send them to the nearest relevant page.

How to verify any fix

You will use the same four checks for every leak.

  • Private window. Open the old URL and confirm where you land. Shopify notes that 301 redirects are cached by browsers and search engines, so test in a private window and do not trust a normal window straight after a change.
  • Status code. In a terminal, curl -I https://yourstore.com/old-path prints the headers (on Windows PowerShell, use curl.exe). Look for the status and the location header.
  • Re-crawl. The URL should leave the 4xx or 3xx list, and nothing should still link to it.
  • Search Console. Fix all instances first, then use Validate fix once. Google says validation typically takes up to about two weeks and can take much longer. That is the time Google takes to check; it promises nothing about traffic.

The five leaks in priority order

LeakFix first whenUsual fix
1. Dead product or collection URLs your pages still link toA menu, collection or busy page links to itUpdate the link, or 301 to a real replacement
2. Blog links pointing at unavailable productsThe post gets organic visitsEdit the link in the post
3. 302s and redirect chainsThe URL gets visits or sits in navigationMake it a 301 and point it at the final URL
4. Broken or missing imagesThe image is on the home, collection or product pagesRe-upload or replace, add alt text
5. Multiple H1 headingsLast: accessibility and clarity, not rankingChange the extra H1s to H2 or plain text

The order is how directly each hurts a shopper who arrives. A dead link in your navigation hurts everyone. An extra H1 hurts almost nobody.

A product is deleted, set to draft or removed from every sales channel, or a collection is hidden. Its URL now returns a 404, while menus, collections, blog posts and emails still point at it. Shopify’s help describes the mechanics: deleting a product removes it permanently, setting products to Draft or removing them from all sales channels makes them return 404 errors, and hiding a collection does the same for its address.

How to find it

  • Crawler: filter for 4xx responses, then read the inlinks. The finding is the page that links to the dead URL, not the dead URL.
  • Search Console: Not found (404), cross-checked against clicks. A 404 with past clicks takes priority over one with none.
  • Links report: do any dead URLs have links from other websites?
  • Shopify admin: open Content, then Menus, and click every link in the main menu and footer. Menus are the busiest place a dead link can sit.
  • Check what the URL really returns. On a Shopify demo store I checked on 31 October 2026, a made-up collection address returned a genuine 404. Test a retired product on yours: a friendly “not found” message with a 200 status is a soft 404, covered in our guide to soft 404s in Search Console.

How to fix it

Pick one of four outcomes.

  • Restore it if the item is only out of stock. Keep the page live and say so; our product page SEO checklist covers sold-out items.
  • 301 to a close replacement if the product was replaced, renamed or merged into a variant. Google says the same for a moved page.
  • 301 to the most relevant parent if there is no replacement but the page had visitors: a retired serum to the serum collection. Google’s site-move guidance warns against redirecting many old URLs to one irrelevant destination such as the home page, with merged pages as the exception. That guidance is written for site moves and I am applying it by analogy, but the logic holds: a shopper after one item who lands on your home page has been dropped, not helped.
  • Leave it as a 404 and remove the links if nothing replaces it and no one arrives. Google says a 404 is a strong signal not to crawl that URL again.

To create a redirect, go to Content, then Menus, then URL redirects. Enter the old path in Redirect from and the new path, such as /collections/serums, in Redirect to. Shopify says redirects start working immediately, and a CSV Import handles bulk lists using its sample template. Limits from Shopify’s documentation:

  • You can redirect only from a broken URL. If the old address still loads a valid page, the redirect will not work.
  • If a hidden collection is made visible again, Shopify deletes its redirect automatically.
  • Reserved paths, prefixes such as /apps and /cart, and collection tag-filtered URLs cannot be redirected.

Then fix the links themselves. A redirect is a safety net for strangers. Your own menus and collections should point straight at the live page.

Leak 2: Blog posts linking to unavailable products

This is leak 1 in the place it is easiest to miss: the body copy of old posts. “Five serums for sensitive skin” links to five products and two were retired last year. A reader clicking a product link in a post is mid-decision, exactly who you want on a product page.

How to find it

  • Crawler: in the 4xx inlinks, filter the source pages to your blog address (stores usually serve posts under /blogs/). You get each post and the exact dead link on it.
  • By hand: open your ten best posts by Search Console clicks and click every product link. A crawler finds hard errors; only a person notices a link that works but lands on a sold-out or unrelated product.
  • Check the status. Shopify says an Unlisted product is hidden from internet search, Shopify Catalog and your sitemap, has noindex and nofollow tags added, and stays reachable by direct URL. A blog link to one works for the reader but points at a page you have told search engines not to show. That may be intended or a mistake. The Shopify pages I read do not define what a visitor sees for every other status, so test each linked product in a private window.

How to fix it

Edit the link at the source, and do not rely on a redirect to catch it. Link to the current product if there is a real successor, to the collection if only the category survives, or remove the link and keep the words. If the post still recommends something you cannot sell, rewrite that sentence: it is not a technical error, but it is a conversion leak. Do the posts with the most clicks first, and decide the link outcome the day you retire any product.

Leak 3: Temporary (302) versus permanent (301) redirects, and chains

A redirect’s type tells Google what you mean by it.

Status codesGoogle’s categoryWhat Google says
301, 308PermanentShows the new target in search results; a strong signal the target should be canonical
302, 303, 307TemporaryShows the source page in search results; a weak signal

These come from Google’s redirects documentation and its page on HTTP status codes, which also says 308 is equivalent to 301 and 307 to 302. Google recommends a permanent server-side redirect whenever possible, and a temporary one when a service is temporarily unavailable. With a temporary redirect, the target might still be indexed if other canonicalisation signals are present.

The leak is a page that is gone for good behind a redirect that says “temporary”. Google may keep the old address in results. A chain is A to B to C. Google says to avoid long ones, and lists a chain that is too long, or a loop, as a cause of Redirect error. Its crawlers follow up to 10 hops by default: a ceiling, not a target. The right number is one.

What is normal

Not every 302 is a mistake. On the demo store on 31 October 2026, /account and /checkout both returned a 302 (to login and to a checkout address), and plain http redirected to https with a 301. That looks like the platform doing its job, but it is one store on one day, so check your own. The redirects that matter are on content URLs: products, collections, posts and pages.

How to find it

  • Crawler: filter for 3xx. Screaming Frog separates server redirects from JavaScript and meta refresh redirects, which behave differently. Export the status, destination and inlinks. A destination that is itself in the list is a chain. A long run of different old URLs all landing on / is the leak 1 pattern.
  • Search Console: Page with redirect. Google describes it as a non-canonical URL that redirects, not indexed itself, so a long list is normal. It becomes a finding when a URL you link to or submit in your sitemap appears on it. Alternate page with proper canonical is another expected status.
  • Shopify admin: Content, Menus, URL redirects lists redirects you created. It will not show redirects added by an app, theme code or a service in front of your store.

How to fix it

  • Redirects from Shopify’s tool. Shopify’s SEO overview says to set up 301 redirects when moving or discontinuing products, but its redirect page does not state which type the tool creates. Test one with curl -I and confirm.
  • A 302 on a content URL. My reading is that, because Shopify lets you redirect only from an already-broken URL, a temporary redirect on a live content page probably did not come from the tool. Check apps that redirect by country or language, theme scripts and anything in front of the store, using the response headers. Make it permanent or remove it. A genuinely temporary promotion redirect can stay.
  • Chains. Edit the first redirect to go straight to the final URL, then update any internal link still using the earlier addresses.
  • Keep them. Google’s site-move guidance says to keep redirects as long as possible, generally at least one year. It is written for site moves, but the logic fits retired products, because old links keep arriving.

On a redesign or replatform, redirect mapping is the heart of the job: see our Shopify migration SEO checklist. One URL Inspection quirk, from Google’s help: for a redirecting URL, the indexed result reflects the tested URL, not the redirect target.

Leak 4: Broken or missing images

Two problems share the name. A broken image is a file the page asks for that is not there: a gap, a tiny icon or just the alt text. It happens when a file is deleted from Files or a product, a theme image setting is cleared, or an inline blog image points at a replaced file. Missing alt text is an image that loads with no description.

Shopify says alt text is shown if media cannot load and is used by assistive technology to describe an image to a customer who is visually impaired. Google’s image guidance calls alt text the most important attribute for image metadata and warns against keyword stuffing, but it does not cover broken images, and I am not claiming ranking harm. The honest case is shopper trust and accessibility: a product page with a missing main photo does not sell. If the image is the largest thing on the first screen, size matters too; see fixing a slow hero image.

How to find it

  • Crawler: with image crawling on, filter 4xx responses for image file URLs and use inlinks to see which pages use each. Screaming Frog’s Images tab also has a Missing Alt Text filter.
  • By eye: open the home page, top collections and best-selling products on a phone. A missing image is obvious in seconds.

How to fix it

  • Product images: open the product, fix or re-upload the media, then click the media item to open its preview and choose Add alt text. Shopify says the maximum is 512 characters, but 125 or fewer is recommended.
  • Theme images: from Online Store, click Edit theme, select the section with the image, click Edit on the image and enter the alt text, per Shopify’s steps. If the image itself is missing, choose a replacement in the same place.
  • Images in posts and pages: reinsert the image, and check whether the old file was deleted from Files.
  • Shopify’s media editor might suggest alt text for images without it. Read and edit each suggestion. Write for people: Shopify’s example is “Men’s waterproof hiking boots”.

Leak 5: Multiple H1 headings

The H1 is the top-level heading. Shopify’s SEO overview says to use H1 for page titles and H2 and H3 for subsections. Pages end up with several when a theme section, slideshow, page builder block or app uses the H1 tag for a visual headline. It looks fine; the structure underneath has several top-level headings.

Is it a ranking problem?

I would not frame it that way, and the documentation I read does not. Google’s SEO starter guide says it does not matter to Google Search whether headings are used out of order and that there is no ideal number of headings. It sets no limit on H1s. Screaming Frog, a crawling tool and not Google, flags pages with more than one H1. It notes HTML5 permits several, while still generally recommending a single H1.

The better reason to tidy this is accessibility and clarity. The W3C says headings communicate the organisation of the content, assistive technologies can use them for in-page navigation, and skipping ranks can be confusing. That is why this is the last leak: cheap to fix when you are in the theme anyway, not worth a project on its own.

How to find it

  • Crawler: the H1 tab, with the Multiple filter, plus Missing and Duplicate.
  • By hand: view the page source and search for <h1. On the demo store on 31 October 2026, the home page had one.
  • Sample by template. Check one home page, collection, product, post and page. A multiple-H1 problem usually comes from a section, so one fix covers every page that uses it.

How to fix it

  1. Decide the single H1 per template: product name, collection name, or the main home headline.
  2. Change the extra H1s to H2 or ordinary text. Some themes expose a heading-level setting on a section; if not, it is a small code edit. Test on a duplicate of the live theme, and ask a developer if you are not comfortable in code.
  3. If an app block causes it, look for a setting or ask the app’s support. If you want a smaller heading, change its styling, not its level.

Then re-crawl with the Multiple filter and read one page per template’s heading outline top to bottom. It should read like a table of contents.

A worked example (illustrative numbers)

These numbers are made up to show the triage. They are not from any real store. Say a store has 120 products, 18 collections and 40 blog posts.

FindingCountDecision
Retired product URLs returning 404, linked from somewhere94 have a replacement: 301. 3 go to their collection. 2 have no clicks and no links: leave as 404, remove the links
Blog posts holding a dead product link7Edit the links: 5 to a replacement, 2 removed
Redirects on content URLs126 are 302s with no reason: make 301. 3 are two-hop chains: shorten to one. 3 are fine
Product and theme images returning 40411Replace 8, remove 3 unused references
Templates with multiple H1s2Change the extra headings to H2 in the theme

The arithmetic: 4 + 3 + 2 = 9; 5 + 2 = 7; 6 + 3 + 3 = 12; 8 + 3 = 11. A crawl list of 41 rows (9 + 7 + 12 + 11 + 2) became a short list of specific tasks. “Redirect all the dead URLs to the home page” would have left the dead links in seven blog posts.

What not to do

  • Do not redirect everything to the home page. It feels tidy and fails the shopper.
  • Do not block dead URLs in robots.txt. Google describes robots.txt as a way to manage crawl traffic, not a way to keep a page out of Google, and a block does nothing to repair the links pointing at the dead URL. Our robots.txt guide covers what a block does.
  • Do not edit URL handles for the sake of it. Shopify’s help warns that editing a product’s handle too often can mean the product might not display in search results. When you must, add the redirect in the same sitting.

When to leave it alone

Leave a row if the 404 is for an address that never existed, if a long Page with redirect list is old URLs you redirected on purpose, or if a 302 is an account or checkout path. Act when a shopper or a link can reach a dead end from somewhere you control.

To keep it clean, recheck whenever you retire a product, after a theme change or a new app. That schedule is my rule of thumb: Google gives none. Our Shopify SEO guide and the SEO and CRO resource hub show where this audit sits. If the list you are sorting is the indexing one, start with Crawled - currently not indexed.

Key takeaways

  • Five quiet leaks, in order: dead product or collection URLs your pages still link to, blog links to unavailable products, 302s and chains, broken or missing images, and multiple H1s.
  • Google says a 404 is not necessarily a problem when a page was removed with no replacement. It does not describe a handful of 404s as harming the rest of your site.
  • Use a 301 when a page has moved for good: Google treats it as a strong signal that the target is canonical. A 302 is a weak signal and the old address may stay in results.
  • Aim for one hop. Do not redirect retired products to the home page: use a close replacement or the most relevant collection, or let the URL 404 and remove the links.
  • Fix links at the source: menus, collections and blog posts. A redirect is a safety net, not the repair.
  • Broken images and missing alt text are about trust and accessibility. Extra H1s are mainly an accessibility and clarity tidy-up.
  • Verify with a status check, a re-crawl and Search Console. Google promises no result beyond the check.

FAQs

Is a 302 redirect bad for SEO on Shopify?

Not always. Google treats a 302 as temporary: the original URL may stay in results and the redirect is a weak canonical signal. That suits something temporary and is wrong for a page that is gone for good. Check the 302s on content URLs. On the one Shopify demo store I checked, the account and checkout paths returned a 302, and those are not content pages.

Google’s documentation does not say a few broken links harm the rest of your site. The cost is practical: shoppers reach a dead end and a page you wanted found stops working. Fix the ones people actually reach.

Should I redirect deleted Shopify products to the home page?

Usually not. Google’s site-move guidance warns against sending many old URLs to one irrelevant destination such as the home page. Redirect to a close replacement or the most relevant collection. If neither exists and no one arrives, let the URL return a 404 and remove the links.

Do multiple H1 tags hurt Shopify SEO?

The documentation I read does not say so: Google’s starter guide sets no ideal number of headings. The stronger reason to tidy extras is accessibility, because a clear outline helps people using assistive technology.

Does Shopify create a redirect automatically when I delete a product or change a URL?

I could not confirm that from the Shopify help pages I read. They describe creating redirects yourself and give a Shopify Flow example that creates one when a product is deleted, with a warning that it might not work if the product had a customised handle. Check the URL redirects list after any URL change, and add the redirect yourself if it is missing.

Want a second pair of eyes on your store’s technical health?

Crawling a store and sorting what matters from noise is part of the technical audit in our Shopify SEO service, which covers crawlability and indexation. If you want a quick look first, book a free 30-minute diagnostic or tell us about your store. We look at your store before we recommend anything, and we tell you honestly if SEO isn’t the right move. No pitch.

Free 30-min diagnostic

Seen enough?
Book a free diagnostic.

We'll look at your store's search pages, find what is costing you traffic and tell you what to fix first. No pitch. No email gate. 30 minutes.

More from Prism3