Hreflang tags signal to Google which language or regional version of a page to serve in search results. Implementing them correctly prevents duplicate content issues and ensures French-speaking searchers in Quebec see your French pages while English-speaking users in Ontario see the English equivalent.
Every hreflang tag consists of three parts: the rel attribute set to "alternate", an hreflang attribute specifying the language or language-region pair, and an href pointing to the absolute URL of that variant. The critical rule is reciprocity. If your English page at example.ca/about/ references your French page at example.ca/fr/a-propos/, that French page must link back to the English version and also include a self-referential tag pointing to itself. A complete cluster for a bilingual site might look like this in the HTML head of the English page: a tag for hreflang="en-CA" pointing to the English URL, and a tag for hreflang="fr-CA" pointing to the French URL. The French page carries the identical set. Missing the self-reference or forgetting to add the reciprocal link from the French side breaks the signal and Google may ignore the entire cluster.
Language codes follow ISO 639-1, so English is "en" and French is "fr". Region codes are ISO 3166-1 Alpha 2, meaning Canada is "CA", the United States is "US", France is "FR", and so on. You can use language alone if your content is not region-specific — for example, hreflang="en" if the page serves all English speakers globally. If you operate a .ca site with distinct content for Quebec and the rest of Canada, you would typically use "en-CA" and "fr-CA". If your French content also serves users in France or Belgium, you can add "fr-FR" or "fr-BE" tags pointing to those variants, or use a broader "fr" if a single French page suffices. The x-default variant is a fallback for users whose language or region does not match any declared hreflang; point it to your default or most universal version.
You can place hreflang annotations in the HTML head of each page, in the HTTP header, or in an XML sitemap. HTML head tags are the most common and work well for content management systems like WordPress with plugins such as WPML or Polylang that auto-generate the markup. HTTP headers suit non-HTML resources like PDFs — the header format is Link: with the same rel and hreflang attributes. XML sitemap implementation centralizes all hreflang declarations in one file, which scales cleanly for large sites but requires careful maintenance to keep URLs current. Choose based on your CMS capabilities and team workflow. Many Canadian agencies default to HTML head tags for bilingual WordPress or Shopify sites because plugins handle reciprocal logic automatically, reducing manual error.
Install a multilingual plugin like Polylang or WPML. Configure your language settings to include English Canada and French Canada, assigning locale codes en_CA and fr_CA. Translate or create equivalent pages in both languages, ensuring each piece of content has a corresponding variant. The plugin will insert hreflang tags in the head automatically, linking each page to its translation and back to itself. Verify the output by viewing page source on both language versions — you should see two hreflang entries per page. Submit an XML sitemap that includes all language variants to Google Search Console, then monitor the International Targeting report under Legacy Tools to confirm Google recognizes the hreflang clusters. If you see warnings about missing return links or conflicting canonicals, audit your reciprocal structure and ensure canonical tags point to the same URL as the self-referential hreflang tag.
The most frequent mistake is incomplete reciprocity — Page A references Page B, but Page B does not reference Page A or itself. Another pitfall is conflicting canonical and hreflang signals: if the English page has a canonical pointing to the French URL while hreflang declares them as separate language variants, Google receives mixed instructions and may ignore hreflang entirely. Incorrect language codes, such as using "fr-QC" instead of "fr-CA", will also fail because QC is not a valid ISO 3166-1 code. Tools like Screaming Frog, Sitebulb, or the hreflang tag testing tool in Google Search Console help identify orphaned tags, broken reciprocal links, and malformed attributes. Run a crawl after initial setup and again whenever you add new pages or translations to catch regressions early.
Canonical tags tell Google which version of a page is the authoritative source when duplicates exist. Hreflang tags tell Google which language or regional variant to show for a given query. These signals must align. Each language variant should have a self-referential canonical — the English page canonicalizes to itself, the French page to itself. Do not set a canonical from the French page to the English page unless you genuinely want to consolidate them, which defeats the purpose of hreflang. URL structure is flexible: subdirectories like /fr/ and /en/, subdomains like fr.example.ca and en.example.ca, or entirely separate domains like example.ca and example.fr all work. Subdirectories on a single .ca domain are simplest for most Canadian bilingual sites because link equity and trust signals consolidate under one root, and management overhead is lower than juggling multiple domains or subdomains.
Success means the correct language variant appears in search results for users in the intended region or language setting. Monitor Google Search Console for hreflang errors in the Coverage and Enhancements sections, and check that impressions and clicks in Performance reports align with the language of the query. If French queries consistently trigger your English pages, revisit your hreflang implementation and confirm reciprocal tags are present. As your site grows, maintain a content parity checklist so every new English page gets a French equivalent and vice versa. Broken translations or orphaned pages dilute the hreflang signal. Set a quarterly audit cadence to crawl for missing or mismatched tags, especially after CMS upgrades or theme changes that might strip custom head elements.
No. Hreflang is only necessary when you have multiple language or regional variants of the same content. A single-language site does not benefit from hreflang and should rely on standard on-page SEO and geotargeting in Search Console if you want to signal a preferred country.
Yes. If your content differs meaningfully between regions — such as pricing in CAD versus USD, different shipping policies, or localized examples — you can declare en-CA and en-US variants with hreflang. If the content is identical, there is little SEO benefit and you risk diluting signals; in that case, a single en page with geo-adaptive elements may be simpler.
Google may ignore the entire hreflang cluster or interpret it inconsistently. The self-referential tag confirms that this page is the authoritative version for its own language or region. Without it, reciprocal validation fails and you lose the control hreflang is meant to provide.
HTML head tags are easiest for most CMSs and allow plugin automation. HTTP headers suit non-HTML files like PDFs. XML sitemaps scale well for very large sites but require disciplined updates whenever URLs change. Pick the method that fits your technical stack and maintenance workflow; all three are valid in Google's eyes.
If your content is tailored specifically for Quebec — local terminology, CAD pricing, Canadian legal references — use fr-CA. If the same French text serves users in France, add a separate fr-FR tag pointing to a France-specific page or use a single fr tag as a catch-all. Do not point fr-CA and fr-FR to the same URL unless the content is truly universal.
Common causes include missing reciprocal links, incorrect ISO codes, URLs blocked by robots.txt, or canonical tags that conflict with hreflang. Use the URL Inspection tool to confirm Google can fetch and render both variants, then check that every hreflang entry has a matching return link and self-reference on the target page.