umbrella Multi Storefront & SEO

Multi-storefront SEO

Shopify multi-storefront SEO: what happens by default

If several brands share one Shopify store, each on its own domain, Shopify does something specific and largely invisible: it advertises your entire catalogue from every domain, and it credits your primary domain for every page. This is what we measured on a live store, and what it takes to change.

The setup this describes

One Shopify store. Two or more domains attached to it, each set not to redirect, so each serves the storefront under its own hostname. One catalogue, one inventory, one admin, one subscription. Products divided between brands by collection, tag or vendor.

It is a common arrangement and a sensible one. Running the same brands as separate Shopify stores means a subscription each, an inventory each, an admin each, and a sync product to keep the three in step. Domains on one store avoids all of that. How that setup works, and its limits, is a separate page.

What the arrangement does not come with is a separate search identity per brand. That part is the subject here.

What we measured

A live Shopify store on the Basic plan, three domains attached as non-redirecting aliases, 313 products in one shared catalogue. Every domain fetched and compared. Verbatim findings:

What was checkedWhat Shopify did
Does each domain actually serve pages? Yes. All three returned HTTP 200 with zero redirects. Secondary domains are not force-redirected.
Canonical tag on the secondary domains Every page — homepage and product pages alike — carried a canonical pointing at the primary domain’s equivalent URL. og:url did the same.
Default sitemap on each domain Each domain served the full catalogue — all 313 products, an identical count on all three — with each <loc> rewritten to that domain’s own hostname. Three copies of one catalogue, each claiming a different host.
Default robots.txt Standard Shopify output per domain, its Sitemap: line self-referencing that domain. So each brand’s robots file actively points crawlers at the whole-catalogue sitemap.
hreflang or noindex anywhere Neither. Nothing was suppressed and nothing was regionally distinguished.

Scroll the table sideways to read both columns.

Both halves matter. The sitemaps say every one of these domains sells all 313 products. The canonicals say credit the primary domain for all of them. A brand’s own domain is simultaneously advertising its siblings’ products and disclaiming its own.

Why this is easy to miss

Nothing is broken in a way you would notice. Every page loads. Every domain shows the right branding if you have themed it that way. Orders arrive. Analytics report traffic. The defaults are only visible in three files nobody opens during a launch: /sitemap.xml, /robots.txt, and the <link rel="canonical"> in the page head.

You can check your own store in one command, without installing anything:

curl -s https://your-brand.com/sitemap.xml | grep -c "<loc>"

Run it against each of your domains. If the counts match, every domain is advertising the same catalogue. Then check who gets the credit:

curl -s https://your-brand.com/products/some-product | grep canonical

If the hostname in that tag is not the domain you asked, that page is telling search engines a different storefront owns it.

The three things that change it

Three files decide which brand a page belongs to, and all three are addressable without splitting your store.

A sitemap per storefront

Each domain gets its own sitemap index listing only the products, collections, pages and articles assigned to that brand. Shopify’s own generated sitemap cannot be filtered, so this means publishing sitemaps yourself — and, since a sitemap has to be reachable at all times, publishing them somewhere that does not go down when an app does.

A canonical that names the owner

A product belongs to one brand. Its canonical should name that brand’s domain on every domain the product is reachable from — not the domain the visitor arrived on, and not whichever domain happens to be primary. This is the one edit that has to happen inside the theme, because a canonical tag lives in the layout and no two themes put it in the same place.

A robots.txt that suppresses Shopify’s

Replacing your sitemap is only half of it. Shopify’s whole-catalogue sitemap stays reachable at its default path, and the default robots.txt keeps advertising it. Both have to change in the same file: disallow the default sitemap paths, and replace the Sitemap: directive with your own.

The homepage shows the before and after of exactly this, as one command run against three domains. The documentation is the step-by-step version.

What it does not fix

It does not promise you rankings. Correcting these three files makes each storefront describe itself accurately. What a search engine then does with an accurate description is its own decision, and no app can commit to it on Google’s behalf. Anything you read that guarantees a position is guessing.

It is not international SEO. Country and language versions of a single brand need hreflang, which is a different mechanism handled through Shopify Markets. Umbrella does not manage hreflang.

It does not separate your operations. One catalogue, one inventory and one admin is the point of the arrangement, not a side effect to be worked around. If your brands need genuinely separate stock and staff, they need separate stores.

A single domain gains nothing. With one storefront there is no second brand to distinguish it from, and Shopify’s defaults are already correct.

Where to go next

Umbrella is the app that does the three fixes above: per-storefront sitemaps published to their own host, canonical tags that name the owning brand, and a robots.txt written into your theme that suppresses Shopify’s. It is priced by connected storefronts and every plan includes the whole engine.

Install on Shopify See pricing