When Search Console reports "Alternate page with proper canonical tag" or "Duplicate, Google chose different canonical," it is telling you that multiple URLs exist for the same content and that Google has chosen a version that differs from the one you intended.
The canonical tag may point to the correct URL, but the rest of the implementation is still leaking variants. Fixing this state is less about convincing Google that your canonical is correct and more about eliminating the contradictions that forced it to choose.
Identify the duplicate paths
The quickest first pass is to isolate which versions of the page exist:
- parameter and faceted URLs created by filters, sorts, or tracking parameters
- locale, preview, or staging routes that are publicly accessible
wwwand non-wwwhosts, HTTP and HTTPS variants, or capitalization differences- trailing slash and alias patterns that resolve to the same page
Listing every variant gives you the scope of the problem. Google will choose one canonical, but the rest still consume crawl budget and dilute signals until they are cleaned up.
Align signals at every layer
Once the duplicate set is clear, make sure all signals point to the same target:
- implement 301 redirects from every alternate URL to the intended canonical
- ensure the final HTML response includes a self-referencing canonical tag that matches the destination exactly
- update navigation, breadcrumbs, and sitemaps so only canonical URLs are being promoted
- use a single host and protocol consistently in configuration, environment variables, and template helpers
The goal is not just to tell Google which page you prefer. It is to remove the alternatives entirely.
Validate the cleanup
After implementing redirects and updates, verify that:
- all alternate paths redirect to the canonical URL with a 301 status
- the canonical tag on the destination page matches its own URL exactly
- internal links and sitemaps no longer reference obsolete or faceted variants
- Search Console shows a decline in alternate pages as they are recrawled and consolidated
It may take a few crawl cycles for the coverage state to change. The measure of success is not instant removal. It is the progressive consolidation of signals around the canonical path.
Turn the note into a sprint
GSC indexing and crawl cleanup
If this matches the live symptom, send the URL, what changed, and the affected pages so the first pass can stay bounded.