TheOptimizationIdiot - 3:23 pm on Mar 12, 2013 (gmt 0)
What I'm saying is you're not understanding the <link rel=canonical> is designed to work by Pointing To the canonical page From the non-canonical page. Not Pointing To the canonical page From the canonical page.
That's how it was introduced. That's still how it's intended to be used. That has not changed since the introduction of the element.
It's designed to be used in a case where a 301 can't.
You're saying you're going to point to the canonical page from what you want to be considered the canonical page.
That's not how it's designed to work. It does not replace a 301 that way. A 301 goes From the old location (non-canonical) To the new location (canonical). To not be ignored and do what you want the canonical element should point From the non-canonical page To the canonical page.
You're saying all 3 pages you're calling alternates are the canonical version of the page the way you're doing it.
It's about the same as doing this:
<link rel="canonical" href="example.com/en/page.html">
<link rel="canonical" href="example.com/fr/page.html">
<link rel="canonical" href="example.com/es/page.html">
There's no way they could not simply ignore it.
The way you're wanting to do it actually makes more sense if they're not alternates, but anyway, I've tried my best to explain it.
There's not much else I can say, except good luck and I do recommend adding all 3 alternates to an xml sitemap but not any of the pages with parameters, which is Google specific, but can help them "get the right (canonical) version" of duplicate pages indexed.