Canonical tags and duplicate content: how to get them right
Contents
The same page is often reachable at many addresses. With and without www, with tracking parameters, with a trailing slash, over http and https. To a crawler these can be separate pages with identical content. A canonical tag says which one counts.
Which checks cover canonical?
| Check id | What it tests | Passes when |
|---|---|---|
canonical | A canonical link is present | The tag exists |
canonical_self | The canonical points to this page | The canonical resolves to the scanned URL |
canonical_absolute | The canonical is an absolute URL | It starts with a scheme like https: |
og_url_matches_canonical | og:url agrees with the canonical | Both name the same page |
meta_robots_conflict | Robots directives do not contradict | No index with noindex |
What does the tag look like?
<link rel="canonical" href="https://example.com/care">
Use the full URL, with the scheme and host. A relative value like /care is easy to break and fails canonical_absolute.
When should the canonical point elsewhere?
When the page is a deliberate copy: a print version, a filtered list, or a tracking-parameter variant. Then canonical_self will fail, and that is correct. Decide on purpose. If a page is meant to rank by itself, it should point to itself.
What are the common mistakes?
- Canonical pointing at the home page from every page.
- A canonical that differs from the redirect target or from
og:url. - Two canonical tags that disagree.
- A canonical pointing at a URL that is blocked or marked
noindex. See robots.txt and AI crawlers. - Mixing
indexandnoindexin one robots meta.
How do you reduce duplicate content in the first place?
- Redirect
httptohttpsand pick one hostname. - Pick a trailing slash policy and keep it.
- Keep parameters out of internal links.
- Give each page its own title and description. See meta descriptions.
Key takeaways
- One absolute canonical per page, normally pointing at itself.
- Point it elsewhere only for true copies.
- Keep
og:urlequal to the canonical. - More SEO ids are in every SEO check.
FAQ
- What is a canonical tag?
- It is a link in the head that names the preferred address for a page. Search engines use it to pick one URL when the same content is reachable at several.
- Should a page point its canonical at itself?
- Usually yes. A self-referencing canonical is the safe default. Point elsewhere only when the page really is a copy of another.
- Is the canonical a command?
- No. It is a strong hint. Search engines can pick a different URL if other signals disagree.
- Why does findable skip canonical_self?
- It needs a canonical to compare against. With no canonical tag, canonical_self and canonical_absolute are skipped and canonical fails.
How does findable score a page?
| Family | Weight | Question it asks |
|---|---|---|
| SEO | 50% | Can crawlers read and index this page? |
| AEO | 25% | Is it easy to lift an answer from this page? |
| GEO | 25% | Does the page give a generative model a reason to cite it? |
The hosted audit waits up to 10 s for a page and fetches at most 5 MB. It reads robots.txt and llms.txt up to 512 KB each.
More guides
- Every findable AEO Check ID and How to Fix It
- All 35 AEO checks in findable explained, from aeo_faq to aeo_summary. See what each id tests, how loose the test is and how to fix it. AEO is 25% of the score.
- FAQ Schema for Answer Engines: Markup and Checks
- How to add FAQPage JSON-LD that answer engines can lift, and how findable tests aeo_faq, aeo_faq_count and faq_valid. Includes a working example.
- Get Findable in 15 Minutes: A Step by Step Checklist
- Install findable, audit a page and your site, fix the top failures, then add MCP, the web UI, the API and a CI gate. Every step has a copy-paste command.
- Every findable GEO Check ID, Plus AI Crawler Checks
- All 27 GEO checks in findable explained, plus the unscored Site checks for GPTBot, ClaudeBot and llms.txt. GEO is 25% of the score. Fixes included.
- Image Alt Text, Dimensions and Lazy Loading Explained
- Fix img_alt, img_dimensions, img_alt_quality, img_lazy_loading and img_modern_format. See what each image check in findable tests and how to pass.
- JSON-LD Schema Basics: What findable Checks and Why
- Learn what JSON-LD is, which schema.org types findable validates, and how to fix jsonld_valid, jsonld_context and empty or relative values.
- llms.txt: What It Is and How findable Checks It
- llms.txt is a plain Markdown file at your site root that points AI tools to your key pages. See the llms-txt check and how to write the file.
- How to Write a Meta Description That Passes findable
- Write a meta description of 120 to 160 characters, one per page, that matches the page. See the checks desc_exists, desc_length and desc_single.
- Open Graph and Twitter Cards: Fix Your Share Previews
- Add og:title, og:description, og:image, og:url and twitter:card so links unfurl well. See every social check findable runs and how to pass it.
- robots.txt and AI Crawlers: GPTBot, ClaudeBot, PerplexityBot
- How robots.txt rules decide whether GPTBot, ClaudeBot, PerplexityBot and Google-Extended can fetch your page, and how findable tests each one.
- Every findable SEO Check ID and How to Fix It
- A plain guide to all 98 SEO checks in findable, from title_length to csp. See what each id tests, when it passes and the fix. SEO is 50% of your score.
- SEO vs AEO vs GEO: The Difference in Plain Words
- SEO, AEO and GEO each target a different reader: a search crawler, an answer box, or a generative AI model. See what wins in each and how to check them.
- Why AI Answer Engines Skip Your Site and How to Fix It
- ChatGPT, Perplexity and Claude may ignore your pages for five fixable reasons, from robots.txt blocks to missing answers. Learn each cause and its check id.