One canonical URL
Each page names one canonical URL, and every variant points to it.
From seo-audit, Technical SEO: Canonicalization and Indexation.
Six addresses, one page
Press Crawl and watch where the 90 links land.
No canonicalBad
Index0 URLs
Canonical on variantsGood
Index0 URL
// app/layout.tsx
export const metadata = { metadataBase: new URL("https://www.example.com") };
// app/shoes/page.tsx
export const metadata = { alternates: { canonical: "/shoes" } };
Every signal names one URL
Change any signal, or make them all agree.
Signals for one page
// next.config.ts
export default {
trailingSlash: false,
async redirects() {
return [{
source: "/:path*",
has: [{ type: "host", value: "example.com" }],
destination: "https://www.example.com/:path*",
permanent: true,
}];
},
};
Filters mint URLs
Click filters in any order and count the indexed URLs.
Color
Size
Sort
https://www.example.com/shoes
Every filter indexedBad
Index1 URLs
no canonicalCanonical to categoryGood
Index1 URL · 1 crawled
<link rel="canonical" href="https://www.example.com/shoes">Why it matters, pros and cons
Why it matters
Crawlers treat each URL as its own page. A canonical folds them into one.
Pros
- Links to every variant count once.
- You pick the URL shown in results.
- Parameters stop wasting crawl budget.
Cons
- A canonical is a hint; conflicting signals override it.
- Host and protocol variants still need a 301.
- Filter pages with real search demand deserve their own.