canonical and og:url Must Agree
MUST: `canonical` must point at the page's preferred URL and `og:url` must be that same string. When they disagree (`/blog/post` vs `/blog/post?utm_source=x`) the page identifies itself differently depending on who asks: every share links to the tracked variant, so the authority accrues to a URL the page itself disowns, and the crawler gets a duplicate to reconcile. Compute the canonical once and feed the same variable to both tags. Campaign params belong in the link you hand out, never in the tags a page declares about itself.
The URL a page declares as canonical and the URL it hands to social crawlers must be the same string, or one page becomes two
Bad
Good
Why it matters
From the canonical/indexing and social cards rules in ibelick's fixing-metadata skill. These are two tags in different sections of the head, usually written by different people at different times, and they quietly answer the same question: which URL IS this page? When they disagree — canonical says `/blog/post`, og:url says `/blog/post?ref=twitter&utm_source=x` — you have shipped a page that identifies itself differently depending on who is asking.
Everyone who shares it links to the tracked variant, so the authority those shares earn accrues to a URL that the page itself disowns, and the crawler is handed a duplicate to reconcile that it did not need. The failure is not loud: both URLs work, both render, and the split only shows up later as a page that never quite ranks. The fix is mechanical — compute the canonical once and feed the same variable to both tags, so drift becomes impossible rather than merely unlikely. Campaign parameters belong in the link you hand out, never in the tags a page declares about itself.