Duplicate URLs serving the same content split ranking signals across variants, so no single URL accumulates enough authority to rank. Paginated routes without self-referencing canonicals tell Google to ignore pages 2+, stranding inventory and archive content. Parameter permutations (?sort=price, ?sort=name) multiply into thousands of crawlable URLs that consume crawl budget and dilute PageRank across near-identical pages.
Critical because signal-splitting across duplicate URLs suppresses rankings for every affected template simultaneously.
Add absolute HTTPS canonical tags to every duplicate-producing template. Pagination must self-canonicalize — page 2 canonicals to page 2, not page 1. Sort/filter parameter variations canonical back to the clean base URL. Enforce a single trailing-slash policy via framework config and redirect the alternate form.
// app/products/page.tsx
export const metadata = { alternates: { canonical: 'https://yoursite.com/products' } }
ID: marketing-advanced-seo.content-optimization.duplicate-content-handling
Severity: critical
What to look for: Count all pages that could produce duplicate content (parameter URLs, print versions, paginated variants). Enumerate which have canonical tags vs. which do not. Look for patterns that commonly produce duplicate content: (1) paginated routes (/blog, /blog?page=2, /blog/page/2) — check whether canonical tags point to each page itself or incorrectly all point to page 1, (2) tag/category pages producing very similar content, (3) URL parameter variations producing the same content (/products?sort=price and /products?sort=name), (4) trailing slash inconsistency (/about and /about/ both accessible with no canonical disambiguation). Check whether canonical tags or redirects exist to consolidate duplicate or near-duplicate URLs.
Pass criteria: Known duplicate content patterns have canonical tags pointing to the canonical version, OR URL parameters that do not change content are blocked in robots.txt, OR redirects consolidate the duplicate URLs. At minimum, a consistent trailing slash policy is enforced. 100% of duplicate-producing pages must have canonical tags or noindex directives.
Fail criteria: Paginated routes have no canonicalization strategy. URL parameters producing identical or near-identical content have no canonical tags. Trailing slash behavior is inconsistent with no canonical to resolve it.
Skip (N/A) when: The project has a single URL per unique content piece with no pagination, no filterable/sortable URL parameters, and consistent trailing slash configuration. Signal: no dynamic routes with query parameters, no pagination patterns, no tag/category pages.
Do NOT pass when: Canonical tags are present but point to different pages inconsistently, or canonical URLs use HTTP while the site is served over HTTPS.
Cross-reference: For canonical consistency details, see canonical-consistency. For parameter URL handling, see parameter-url-handling.
Detail on fail: "Duplicate content risk: paginated blog pages (/blog?page=N) have no canonical tags. URL parameters (/products?sort=X&filter=Y) generate multiple URLs for the same content. Without canonicalization, search engines may split ranking signals across duplicate URLs."
Remediation: Duplicate content dilutes your ranking signals — the same content under multiple URLs means search engines must guess which version to rank. For pagination, canonicalize each page to itself (not to page 1). For URL parameters, add canonical tags that always point to the canonical (parameter-free or parameter-normalized) URL. For trailing slash consistency, set the trailingSlash option in your framework config and use a redirect to enforce it.
// app/products/page.tsx — canonical for filtered/sorted variants
export const metadata = { alternates: { canonical: 'https://yoursite.com/products' } }
Cross-reference: The SEO Fundamentals audit checks for basic canonical URL presence. This check examines whether canonicalization is applied correctly to duplicate content patterns.