Writing · Case studies

How I found 351 dead product pages in Foot Locker Australia's sitemap

An outside-in SEO audit of footlocker.com.au. Of 964 product URLs in its sitemap, 351 are soft 404s and the other 613 canonicalise to different URLs. What else I found, and what I would fix first.

I completed an outside-in audit of footlocker.com.au in August 2026, then re-checked the main findings against the live site on 8 October 2026. Some had changed. Where a figure comes from one date and not the other, I say which.

This was not client work. I had no access to Foot Locker’s systems, no brief from them and no relationship with them. Everything here comes from pages and files the site serves publicly.

Download the full audit (PDF)

The product sitemap

A sitemap tells Google which URLs you want indexed. Foot Locker Australia’s lists 964 product URLs. On 8 October I fetched every one of them.

Result URLs
Dead product, but the server says HTTP 200 351
Live product, canonical tag points at a different URL 613
Live product at the URL the sitemap submits 0

Not one of the 964 is a live page at its own canonical URL.

The 351 dead pages are soft 404s. They show “Product Not Found” to a visitor, but the server answers HTTP 200, which tells a crawler the page is fine. Each one is easy to spot without running JavaScript: the title reads like Product model 47 brand pinch front cap 192642.html, the canonical tag points at itself, and the only structured data is the site-wide WebSite block.

It is getting worse. In August 291 of the product URLs were dead, 30%. In October it was 351, 36%, and 258 of August’s dead pages were still being submitted. Nike has the most dead pages, 115 of its 300. Jordan has the highest share of the large brands: 85 of 168, just over half.

The other 613 are live, but the sitemap submits a URL like /en/product/model/puma-speedcat-lux/210731.html, and the page’s canonical tag says the real URL is /product/model/puma-speedcat-lux-women-shoes/210731.html. Different path, different slug. The sitemap and the canonical tags disagree on every live product.

The rest of the sitemap

The full sitemap had 3,825 URLs in October. 2,861 of them leave out the /en/ part of the path, and the category pages I checked among them canonicalise to their /en/ version. So the category pages canonicalise towards /en/ and the product pages canonicalise away from it.

In August I crawled all 3,777 URLs the sitemap listed at the time. Only 282 of them, 7.5%, were indexable.

Structured data

On 8 October I sampled 30 live product pages, fetched without JavaScript:

  • 15 carried Product schema with a price
  • 15 carried ProductGroup schema with no price or availability
  • none carried AggregateRating, Review or BreadcrumbList

These pages are server-rendered. Fetched without JavaScript, the HTML already carries the product title, description, price and review count, so a crawler does not need to run any code to read them. Every product page I sampled also renders the product name as two H1s.

Foot Locker collects customer reviews through Bazaarvoice, so the ratings exist. On product pages with reviews, the review data sits in a JSON-LD block with no @type, and in October it was the one thing on the page that only JavaScript added. Search engines cannot use a block they cannot identify, which is why no star rating can come from these pages.

Category pages carry the site-wide WebSite block and nothing else. No ItemList, no BreadcrumbList. That was true across the August crawl and on every category page I checked in October.

Demand they rank for, and demand they do not

In August I tracked 82 search terms for brands Foot Locker Australia stocks. 52 ranked in Google’s top ten in Australia. 18 sat outside the top 20, and most of those were running terms:

Term Searches a month Ranking in August
hoka shoes 60,500 outside the top 30
running shoes 40,500 outside the top 30
women’s on shoes 22,200 outside the top 30
brooks shoes 14,800 outside the top 30
new balance 1080 14,800 outside the top 30

Search volumes are Google Keyword Planner figures. Foot Locker stocks Hoka, Brooks, On and New Balance.

AI answers

Also in August, I put 20 unbranded shopping questions to five AI answer engines: Perplexity, ChatGPT search, Gemini, Claude and Grok. Questions like “Where can I buy Hoka running shoes in Australia?” and “Do Hoka Bondi run narrow or wide?”

Foot Locker was named in 13 of the 20, more than any other retailer. It was listed first in 36% of those answers and linked in 7. It appeared in none of the 7 running and fit questions, which is the same running range it does not rank for on Google.

Store pages

Each store has its own page on stores.footlocker.com.au with ShoeStore schema, an address and a phone number. In October none of them carried opening hours, map coordinates or ratings.

What changed between August and October

  • Soft 404s in the product sitemap rose from 291 to 351.
  • The homepage now links to the store locator. In August I found no links from the main site to the store pages.
  • The store locator’s sitemap now points at the right domain. In August it pointed at .com instead of .com.au.

What I would fix first

The sitemap. It is the cheapest fix with the widest reach:

  1. Build the sitemap from live, canonical URLs only.
  2. Return a real 404 or 410 for discontinued products, or redirect each to its closest category, so the 351 dead pages stop answering HTTP 200.
  3. Make the canonical tags and the sitemap agree on one URL format for products.

Then the structured data: ItemList and BreadcrumbList on category pages, a price on every product page, and the Bazaarvoice ratings exposed as AggregateRating. The ratings are already collected, so this is a markup job.

After that, content for the running range: buying and fit guides for the brands they stock and do not rank for, written so AI assistants can quote them.

The PDF covers all of it in more detail, with the method behind each finding.

Download the full audit (PDF)

Get in touch

Tell me about the role and I will come back to you. If you would rather not use a form, I am on LinkedIn.

    Spam check