Your canonical tag points at a URL that redirects
If Search Console flags canonicals that redirect, your canonical tags probably end in .html while your host serves extensionless URLs and 308-redirects the .html version. You are naming a redirecting URL as the authoritative one. Fix the canonical, the sitemap, og:url and internal links together, then re-request indexing.
A canonical, a redirect and a page Google skipped
Search Console reported pages as Alternate page with proper canonical tag and pages that should have been indexed were not. The file on disk was anagram-solver.html, the host served it at /anagram-solver and issued a 308 redirect from the .html version, and the page still declared the .html address as its canonical. We had told search engines that the authoritative address of the page was a URL that immediately redirects somewhere else.
Extracting every canonical and checking what each one returned made the scale of it visible in seconds. Anything answering 301 or 308 rather than 200 was misdeclared, and the same wrong URL had been duplicated into og:url, the sitemap <loc> entries, and our own internal links.
Search Console reports pages as Alternate page with proper canonical tag, or shows the canonical resolving somewhere other than where you expected. Pages that should be indexed are not.
The usual cause is small and easy to miss: the canonical URL is written with a file extension, while the live URL has none.
What it looks like
Your file on disk is anagram-solver.html. Your host serves it at /anagram-solver and issues a 308 redirect from the .html version. Meanwhile the page says:
<link rel="canonical" href="https://yourdomain.com/anagram-solver.html" />
You have told search engines that the authoritative address of this page is a URL that immediately redirects to a different one. That is a contradiction, and crawlers resolve contradictions conservatively.
Find every instance
Extract the canonicals and check what each one actually returns:
for f in *.html; do
u=$(grep -o 'rel="canonical" href="[^"]*"' "$f" | sed 's/.*href="//; s/"//')
[ -n "$u" ] && echo "$f -> $(curl -s -o /dev/null -w '%{http_code}' "$u") $u"
done
Anything not returning 200 is misdeclared. A 301 or 308 here is a defect, not a redirect working correctly.
Fix all four places, not just the canonical
The same wrong URL is almost always duplicated. Fixing only the canonical leaves the rest contradicting it:
<link rel="canonical"><meta property="og:url">- The
<loc>entry insitemap.xml - Internal links in your own navigation, which should point at the final URL rather than relying on a redirect
sed -i 's#href="https://yourdomain.com/page.html"#href="https://yourdomain.com/page"#g;
s#content="https://yourdomain.com/page.html"#content="https://yourdomain.com/page"#g' page.html
One thing that is not a bug
"Page with redirect" appearing in Search Console for your http:// URLs is expected and correct. Those redirect to https:// because they should. Do not go hunting for a problem there. Only worry when a canonical target redirects.
What a canonical tag actually does, and what it does not
A lot of the confusion around this tag comes from treating it as an instruction. It is not. It is a hint, and search engines routinely override it when the rest of your signals disagree.
What the tag says is: of the several URLs that serve this content, this one is the address I want indexed. What it cannot do is force that choice. Google weighs the canonical tag alongside your internal links, your sitemap entries, any redirects, and which version other sites link to. When those agree, the canonical is honoured almost every time. When they disagree, the tag loses, and you get the report that sends people here: Duplicate, Google chose a different canonical than user.
That report is worth reading literally. It is telling you that your own signals contradicted each other and that the tag was outvoted. The fix is never to reword the tag. It is to find the other signals pointing somewhere else.
Every page should have a self-referencing canonical
The most common thing missing on small sites is not a wrong canonical but no canonical at all on pages that seem obviously unique. Add one anyway, pointing at the page itself.
The reason is that URLs multiply without you doing anything. A link from a newsletter arrives with ?utm_source= attached. A social platform appends its own tracking parameter. Someone links to the trailing-slash version. Each of those is technically a distinct URL serving identical content, and without a self-referencing canonical you are relying entirely on the search engine to work out that they are the same page.
A self-referencing canonical also survives being copied. When a scraper republishes your page verbatim, the canonical tag usually comes along with it and points back at you.
The four ways the same URL gets written differently
Before checking anything, decide which form is the real one and then use it everywhere without exception.
Protocol. Always https. The http version should redirect, and no canonical should ever name it.
Hostname. Apex or www, pick one. Serving both without a redirect is acceptable only if every page carries a canonical pointing at your chosen form, and even then it is worse than a redirect.
Trailing slash. /about and /about/ are different URLs. Most static hosts serve one and redirect the other, and the redirect direction is a host setting people rarely check. Find out which way yours goes and match it.
File extension. If your host strips .html, every reference in your own markup must be stripped too.
Canonicals and paginated or filtered pages
One pattern worth avoiding: pointing the canonical of page two of a list at page one. It was common advice years ago and it is wrong now. Page two has different content, and canonicalizing it to page one tells the search engine to ignore everything on it, including links to items that appear nowhere else.
Give each page of a sequence a self-referencing canonical. If you also publish a view-all page, canonicalizing the paginated pages to that is defensible, because the content genuinely is a subset of it.
Filtered and sorted views are the opposite case. A category page sorted by price is the same content in a different order, so canonicalizing those to the unsorted view is correct and prevents a large number of near-identical URLs from being indexed.
Do not use canonical where you need something stronger
Two things that are frequently attempted with a canonical tag and should not be.
Removing a page from the index. Canonical is a consolidation hint, not a removal instruction. If you want a page out, use noindex. Pointing its canonical at your homepage may work and may not, and it will not work quickly.
Handling a genuine move. If a page has permanently moved, issue a 301. A canonical on the old URL is weaker, slower, and leaves the old URL serving content indefinitely.
The corollary: a page that carries both noindex and a canonical pointing elsewhere is sending contradictory signals, and search engines handle that combination inconsistently. Pick one.
The check that belongs in your pre-launch routine
Canonical, og:url, the sitemap <loc>, and your own internal links, all resolving to a 200 on the same URL form, on every page. It takes one loop, it runs in seconds, and it catches a class of defect that otherwise stays invisible while indexing quietly underperforms for weeks.
Run it again after any bulk edit. Search-and-replace across a site is exactly the operation that changes three of those four places and misses the fourth.
Indexing problems a clean canonical will not solve
Getting all four places onto one URL form stops your signals contradicting each other, and it does not remove a page from the index, which needs noindex, and it does not carry out a move, which needs a 301. It also does not decide the underlying URL form for you: the apex versus www choice and the trailing-slash direction are host settings, and serving both hostnames without a redirect stays worse than redirecting even when every page carries a matching canonical. If a page is still not indexed after the signals agree, the reason is elsewhere, most often that nothing links to the page or that Google fetched it and judged the content, which a canonical tag cannot answer.
Questions about canonical tags and redirects
What does "Alternate page with proper canonical tag" mean in Search Console?
It means Google treated the page as an alternate of whatever URL your canonical names. If that named URL immediately redirects somewhere else, the page you wanted indexed is not the one being indexed.
Is a 301 or 308 on my canonical URL a problem?
Yes. Anything not returning 200 is misdeclared, and a 301 or 308 on a canonical target is a defect rather than a redirect working correctly.
Do I need a canonical tag on a page that is obviously unique?
Yes, pointing at the page itself. URLs multiply without you doing anything, through ?utm_source= parameters, platform tracking parameters, and trailing-slash variants, and a self-referencing canonical also travels with the page when a scraper republishes it.
Can I use a canonical tag to get a page out of Google?
No. Canonical is a consolidation hint, not a removal instruction, and pointing it at your homepage may or may not work and will not work quickly. Use noindex, and do not combine noindex with a canonical pointing elsewhere.
Should page two of a list canonicalize to page one?
No. Page two has different content, and canonicalizing it to page one tells the search engine to ignore everything on it. Give each page in a sequence a self-referencing canonical, or point them at a view-all page if you publish one.
Google chose a different canonical than the one I declared. How do I make it obey?
You cannot. The tag is a hint weighed against your internal links, sitemap entries, redirects, and which version other sites link to, and when those disagree the tag loses. The fix is to find the other signals pointing somewhere else, never to reword the tag.