Shopify multi-domain SEO
Shopify canonical tags with multiple domains
Every page on a non-redirecting second domain carries a canonical tag naming your primary domain instead. It is not a setting you missed, and there is exactly one of them per page — which is what makes it fixable.
Measured on a live Basic-plan store with three non-redirecting domains on .
See what your own pages emit
One command per domain, against the same product:
curl -s https://your-second-brand.com/products/some-product | grep canonical
On a store with non-redirecting secondary domains, the tag you get back names your primary domain, not the one you just fetched. Homepages and product pages alike. On the store we measured, every page on both secondary domains behaved this way, with no hreflang and no noindex anywhere.
Why is the canonical not a setting in Shopify?
Because it is not configuration — it is a line of your theme. Shopify exposes a Liquid object, canonical_url, and the theme prints it into the page head. Its value is derived from the store’s primary domain, and there is no admin field, metafield or per-domain toggle that changes what it resolves to.
That is why searching the Shopify admin for it comes up empty, and why the answer to “which setting did I miss” is that there is not one.
The tag people forget
og:url does the same job for social platforms and link previews, and on the store we measured it carried the primary domain on every secondary-domain page too. Anything that changes the canonical should change og:url in the same pass, or a shared link will name a different brand than the page it opens.
There is exactly one canonical per page, and that is good news
Shopify does not inject a second canonical of its own into the page head. The one your theme prints is the only one, which means the change is a one-line replacement in layout/theme.liquid rather than a fight with markup you do not control.
Replace, do not add. Two canonical tags on one page is a contradictory instruction, and search engines are documented as ignoring the pair. If you are editing this by hand, find the existing line and replace it — adding a second one beneath is the most common way this goes wrong.
Why changing canonicals alone is the risky version
A canonical says which URL owns a page. A sitemap says which URLs a site is advertising. Change the first without the second and your store makes two statements that disagree: the canonical on a product page names the brand domain, while the default sitemap on every domain still advertises that product from all of them.
Shopify’s generated sitemap.xml cannot be filtered or edited, so the only way to withdraw it is to stop pointing crawlers at it in robots.txt. Canonical, sitemap and robots.txt are one change in three files, not three independent improvements.
What changes it
A canonical computed from the brand that owns the page rather than from the store’s primary domain, a sitemap per domain listing only that brand’s URLs, and a robots.txt that withdraws Shopify’s own. Umbrella generates all three and keeps them current; the documentation covers the one theme line you replace, and we will make that edit for you on a duplicate theme if you would rather not.
What none of it does is promise a search result. Canonical tags are an instruction, and a search engine is free to disregard one. Our terms say so in the place it is binding.
Where to go next
- Why every Shopify domain serves the same sitemap — the other half of the same default, and why per-domain sitemaps are an international-domains feature.
- Shopify multi-storefront SEO: what happens by default — the full live measurement.
- Search Console with several brand domains — where you first see this, reported as “Duplicate, Google chose different canonical”.
- Four ways to run several brands on Shopify — including when the answer is Shopify Plus rather than an app.