Broken internal links are links on your own store that point at pages that no longer exist. On Shopify they matter for three reasons: they waste crawl budget by sending Googlebot to dead 404 URLs, they leak internal link equity into pages that can never rank, and they hurt the shopper experience — a customer who clicks a category and hits “page not found” often just leaves. None of that is a direct penalty, but at scale it quietly drags down crawlability and conversions. The fix is straightforward: find them by crawling your site and reading Google Search Console, then repair each one at its source with a redirect, an updated link, or removal.
Why broken internal links matter
Crawl waste. Every internal link is a path a crawler follows. When that path ends in a 404, the crawl of that URL produced nothing useful. On a small store this is noise; on a catalog with thousands of products, a template that links to dead pages multiplies fast and pulls crawl attention away from the pages you actually want indexed.
Lost internal link equity. Internal links distribute ranking signals between your pages. A link pointing at a deleted product is equity poured into a hole — it strengthens nothing. Redirect that link’s target or update the link, and the same signal now reinforces a live, rankable page.
UX and conversion. A broken link in your navigation or a product’s “related collection” is a shopper hitting a wall mid-journey. That is lost revenue, not just a technical wart.
It is not a direct penalty. Google does not hand out a manual action for 404s — dead pages are a normal part of the web. The damage is indirect and cumulative, which is exactly why broken links get ignored until they’re everywhere. Treat this as one line item in a broader Shopify SEO checklist, not a five-alarm fire.
Where broken internal links come from
Most broken links on Shopify trace back to a handful of predictable sources:
- Deleted products and collections without redirects. You remove a discontinued product; anything still linking to
/products/old-handlenow 404s. - Changed product handles. Rename a product or edit its handle and the old URL dies. Shopify sometimes auto-creates a redirect, but not always — and never for links you hard-coded elsewhere.
- Hard-coded links in the theme or navigation. A menu item, a footer link, or a homepage banner pointing at a URL that has since moved. These are the worst kind because they sit on a template.
- App-generated links. Apps that inject “recommended” or “recently viewed” links, or leave links behind after uninstall, can point at stale URLs.
- Migration residue. After moving from another platform (or replatforming a theme), old URL patterns, internal links, and sitemap entries frequently survive the move. See Shopify 404 errors after migration for the full pattern.
- Pagination and filters. Collection pagination or filtered URLs that no longer resolve after a catalog change can generate crawlable dead ends.
How to find them
Use three complementary methods — no single tool catches everything.
- Crawl the site with an SEO crawler. Screaming Frog, Sitebulb, Ahrefs Site Audit, or Semrush will spider your store and flag internal links returning 404 (and 301/302 hops). Crucial detail: the crawler tells you the destination that’s broken and every source page that links to it, which is what lets you prioritize.
- Read Google Search Console. The Pages report (Not indexed → “Not found (404)”) shows URLs Google tried to reach and couldn’t. Cross-reference these with your crawl. GSC reflects what Google actually experienced, which a fresh crawl can miss.
- Check navigation and templates by hand. Click through your header, footer, and mega-menu. Review theme sections that hold hard-coded links (banners, promo blocks, “featured collection” links). These are quick to eyeball and high-impact.
If your crawler is also surfacing long redirect hops, fix those alongside broken links — see Shopify redirect chains for why chained 301s waste the same crawl budget.
How to prioritize
Not every broken link deserves equal urgency. Prioritize by reach and value:
| Source | Priority | Why | Fix |
|---|---|---|---|
| Navigation / header / footer link | Highest | Appears on every page; breaks site-wide | Update the menu/link target |
| Theme template link (product/collection template) | Highest | Repeats across every page using that template | Update the hard-coded link |
| Link on a high-traffic / high-revenue page | High | Real shoppers hit it; conversion impact | Redirect target or update link |
| Deleted product/collection with inbound internal links | High | Leaks equity and drops crawlers into 404s | 301 the old URL to the best live page |
| Changed handle (old URL still linked) | Medium | Localized, but easy to miss at scale | 301 old → new handle |
| App-generated / one-off body links | Medium | Limited reach, but adds up | Update or remove |
| Genuinely dead page, no good replacement | Low | Nothing to redirect to | Remove the link; let the URL 404 |
The rule of thumb: template and navigation links first because one bad link there breaks on thousands of pages. Then work down by traffic and revenue.
How to fix each type
- Moved content (deleted or renamed with a good replacement): add a 301 redirect in Shopify admin (Online Store → Navigation → URL Redirects) from the old URL to the closest live page, and update any internal links you control to point at the new URL directly. A direct link is always better than relying on a redirect.
- Hard-coded broken links in the theme/nav: edit the menu item or theme section to point at the correct live URL. Don’t just redirect the old target — fix the link at the source so no hop is needed.
- Truly dead pages with no equivalent: remove the internal link entirely and let the old URL return a clean 404 (or 410). Redirecting an unrelated dead product to the homepage is a soft-404 anti-pattern Google dislikes — a relevant redirect or an honest 404 is better than a lazy one.
- Migration residue: batch-map old URLs to new ones and load redirects in bulk, then re-crawl to confirm nothing still points at the old pattern.
If pages you want indexed are getting caught up in this — 404ing when they shouldn’t, or simply not appearing in search — work through Shopify pages not indexed by Google after you’ve cleared the broken links.
Prevention
- Redirect on delete. Make “add a 301 to the best replacement” a required step whenever anyone deletes a product or collection.
- Avoid hard-coding URLs in theme sections and banners where a menu link or dynamic reference would do — hard-coded links don’t update when a handle changes.
- QA after every migration and theme change. Re-crawl and check GSC 404s a week after any big change. A clean Shopify development handoff includes a redirect map and a post-launch crawl, not just a live site.
- Re-crawl on a schedule. A monthly crawl catches new breakage before it compounds.
Common mistakes
- Redirecting every dead product to the homepage — that’s a soft 404, not a real fix.
- Fixing the destination but leaving the broken link in place, so the crawler still takes an extra redirect hop.
- Chasing individual body links while ignoring the one broken menu item that breaks on every page.
- Assuming Shopify auto-redirects every handle change. It doesn’t cover links you placed elsewhere.
- Treating a 404 as a crisis. A genuinely dead page returning 404 is correct; the problem is linking to it.
When to get help
If a crawl surfaces hundreds of broken links — the usual outcome after a migration or a theme replatform — hand-fixing them is slow and error-prone. That’s when a structured audit pays off: mapping old URLs to new, loading redirects in bulk, cleaning template links, and re-crawling to prove it’s done. Profit Flow does exactly this as part of a technical Shopify development engagement, or as a standalone profit audit.
Not sure how many broken links you have? Send us your store URL — we’ll crawl it, find the broken internal links that matter, and tell you which to redirect or fix first. Get a free profit audit.