Documentation
Setting up Umbrella
Four steps in the app and one line in your theme. Around fifteen minutes if your domains are already connected in Shopify.
Before you start
Three things need to be true. None of them is Umbrella’s doing — they are how a multi-domain Shopify store works.
- Each brand’s domain is added under Settings › Domains in your Shopify admin, and set to not redirect to your primary domain. A domain that redirects is not a storefront; it is a shortcut to one. More on that setting, and what it does and does not give you.
- You can edit one line of your theme’s code, or you can ask us to. See Installation service.
- If your storefront is password-protected, have the password to hand. Umbrella needs it to fetch your pages and verify the setup, and it never asks you to remove the password to do so.
A www and non-www pair counts as one storefront, not two. Umbrella normalises them on both sides of every comparison, because a canonical is an exact-match signal and an unnormalised one would split a single brand in two.
Setting up
Install Umbrella from its Shopify App Store listing. It opens on a setup wizard that walks through the four steps below.
Connect your storefronts
Umbrella reads the domains already attached to your Shopify store and asks which of them are separate brands. There is nothing to type and no DNS to change — if the domain works in Shopify today, it works here.
Describe each brand
A brand record holds what a storefront is: name, domain, logo, favicon, social profiles, and — on Scale and above — its own analytics or pixel ID. This is also where you choose which optional fields you want; you are not made to fill in what you will not use.
Assign what belongs to whom
Products, collections, pages and blog articles are assigned to the brand that owns them, through a single metafield Umbrella adds. Anything left unassigned stays with your primary store, which is the safe default: unattributed content is still published, just not claimed by a brand that does not own it.
Articles inherit their blog’s assignment when they have none of their own, so a whole blog can be assigned in one move.
Check, then publish
Umbrella fetches each of your domains and reports what it actually sees: whether robots.txt suppresses Shopify’s sitemap, whether the canonical names the right host, whether your sitemap is reachable. Every failure states its reason, and nothing publishes until you have seen the answers.
What goes in your theme
Umbrella requests read_themes and write_themes, and the per-app approval Shopify additionally requires before an app may write theme files. It makes the changes below itself — you review a list of files and press one button. There is nothing to copy and no step that needs the theme editor.
Nothing goes in that you have not seen. The app shows the exact before and after of every file first — line by line, and file by file, with a tick against each one you can clear if you would rather do that file yourself. Clearing one does not hold up the rest, and a file that is skipped says why. Anything you already had is copied into your own theme as snippets/umbrella-…-backup.liquid before it is replaced, and Settings carries an Undo that puts them back. Undo before you uninstall: Shopify revokes the app’s access the moment it is removed, so nothing of ours can reach your theme after that.
The files Umbrella installs Automatic
- templates/robots.txt.liquid — stops crawlers being pointed at Shopify’s shared sitemap and advertises yours instead. It keeps Shopify’s own robots rules: the file loops over the rule groups Shopify supplies and adds the sitemap lines to each, so every crawler group they ship is covered, and rules they add or change later come through on their own. If you already have a robots template of your own, this replaces it — Umbrella saves a copy to snippets/umbrella-robots-backup.liquid, and keeping your own copy first is still the safer habit.
- snippets/umbrella-canonical.liquid — works out which brand owns the current page and emits that brand’s canonical URL.
- snippets/umbrella-brand.liquid — a helper that returns the active brand’s name, logo and fields anywhere in your theme.
- templates/agents.md.liquid — what AI agents read to find out whose storefront they are on. Shopify generates one /agents.md per store and serves the same bytes on every domain, so each brand domain describes itself as your primary brand; this template answers per host instead. It is the one file that does not keep itself up to date. Shopify renders it in a restricted context with no access to your brand data, so the brand values are written in when the file is generated — rename a brand or add one and it needs copying again. The app compares your theme’s copy against a fresh one and tells you which brands it names against which storefronts you now have, so you are not left to notice on your own. If you already had a template of your own, your copy is saved to snippets/umbrella-agents-backup.liquid.
The one edit inside a file you wrote Automatic
Your theme’s own canonical tag is replaced with a render of Umbrella’s snippet:
{% render 'umbrella-canonical' %}
Wherever your theme keeps it. A theme can render its head from any of several files — some put the canonical in layout/theme.liquid, and Shopify’s own Horizon keeps it in a snippet the layout renders. Umbrella locates the tag rather than assuming a file, and shows you which file it found before changing anything. A theme with no canonical at all gets one added to the head instead.
Replace, do not add. Two canonical tags on one page are ignored by search engines, and a validator reads the first one it finds. That is why this is a replacement rather than an addition, and why the app refuses an edit it cannot make cleanly instead of guessing at one.
The app’s Theme code page shows every file it installs, if you want to read the Liquid. The verification step afterwards tells you whether the change landed on each of your domains.
Per-brand titles and share previews Optional, by hand
Not part of setup, and nothing asks you for it. Worth doing if your brands share a homepage template. Shopify serves that one template on every domain and your theme builds the <title> from the store’s name, so every brand’s front page introduces itself as the same shop — in a browser tab, in a search result, and in the preview card when someone pastes the link into a message.
snippets/umbrella-brand-head.liquid renders the title, meta description, Open Graph and Twitter tags, icon and organisation data for whichever brand is being served. Then, in layout/theme.liquid, remove your theme’s own versions of those tags and render the snippet where they were.
{%- render 'umbrella-brand-head' -%}
Removing your theme’s own tags is not optional. A snippet can only add tags, so leaving them in gives every page two titles — and the theme’s renders first, which is the one that counts. Your theme’s head will not look like anyone’s example; what matters is that the same tags come out of it once.
Undo puts your layout back as it was. Undo theme changes in Settings restores layout/theme.liquid from the copy saved when Umbrella installed — taken before you added this line, so undoing takes the line with it. The snippet file itself is left alone, so putting it back is one line. Worth knowing before you edit rather than after.
Only the front page gets the brand’s own title. Every other page keeps its own — a product page’s title belongs to the product — and only the trailing store name is swapped for the brand. If that suffix is the only thing wrong on your theme, the app also gives you a one-line version that changes nothing else.
Each value is looked for in order: the SEO title of the brand’s landing page, set in Shopify under the page’s search engine listing; then the SEO title field on the brand in Umbrella; then the brand’s name and tagline. The page wins, so a title you set in Shopify is never quietly overridden, and a brand with none of them set falls through to your theme’s own title — nothing breaks while you fill them in. Unlike the rest of a brand’s fields these three never fall back to another brand: a storefront titled with a different brand’s name is the thing they exist to prevent.
Set a Social preview image on the brand for share cards — around 1200×630, not the logo, which crops badly at that shape.
Storefront blocks
A single theme serves every storefront, so anything that differs per brand has to resolve the brand at render time. Umbrella ships six blocks that do.
Five of them — announcement bar, top bar, social links, brand card and promotion popup — are generated as Liquid into your own theme, each one also as a {% render %} snippet for a theme too old to accept theme blocks. They are your files. They keep working if you uninstall Umbrella, and you are free to edit them.
The header block is the exception: its Liquid is never published, because resolving the active domain and rendering that brand’s logo and menu is multi-storefront behaviour rather than decoration. You add it from the theme editor like any other block.
Re-check your blocks after a theme update. A theme update can replace the file you added a block to, and nothing outside your own eyes will report it.
Submitting to Google Search Console
Your sitemaps are served from umbrella-sitemaps.niftydesignsolutions.com rather than from your storefront, so Search Console needs that host verified as a property before it will accept the submission. The app gives you the exact URLs and the steps.
Sitemaps live on a separate host deliberately. If the app served them, an app outage would take every merchant’s sitemap down at once — with Shopify’s own sitemap already suppressed, and therefore no fallback. Object storage has no such failure mode.
When something looks wrong
A check fails but the page looks right
Open the page, use View source, and read the <link rel="canonical"> line yourself. A custom domain can serve a cached copy for several minutes after a theme edit, so a check occasionally lags the live page. Re-run it shortly after.
Verification says there is no published theme
This is almost always a permission that was declined or later revoked. Reopen the app from your Shopify admin and accept the requested scopes.
A product is in the wrong storefront’s sitemap
Check its brand assignment. Sitemap membership and canonical URL are both read from the same metafield, by design — a canonical that disagreed with the sitemap would be worse than either rule applied consistently.
My sitemap has not changed since I edited the catalogue
One rebuild a night is automatic on every plan, in your store’s own timezone. Scale and Portfolio add one and two more that you trigger yourself from Build sitemaps; the count resets at midnight local, and using a manual build never postpones the scheduled one. More on how that works.
Some of my pages are missing from the sitemap
Check your URL count against your plan on the Dashboard. Over the allowance, sitemaps carry your plan’s number of URLs and omit the rest until you move up a plan; the store owner is emailed when that starts. If you are under the limit, the cause is a brand assignment instead — see above. Full detail on what happens if you go over.
Removing Umbrella
Uninstalling preserves your configuration, so reinstalling does not mean rebuilding every brand by hand. Shopify then sends an erasure request about 48 hours later, at which point your published sitemap files are deleted first and your records after. To erase everything immediately instead, use Settings › Remove Umbrella data before uninstalling.
Removing the data does not change your theme. Umbrella cannot revert a selective edit inside a file you own, so everything below stays until you undo it. Work on a duplicate theme and publish it when you are happy.
- Delete templates/robots.txt.liquid. The urgent one. Left in place with the app gone it goes on suppressing Shopify’s own sitemap while nothing publishes a replacement — the one state worse than never having installed Umbrella at all. Your original is in snippets/umbrella-robots-backup.liquid; copy it back, or delete the template and let Shopify serve its default.
- Put your theme’s canonical tag back in layout/theme.liquid, replacing the line that renders umbrella-canonical. Left in place it has no brand data to read.
- Delete templates/agents.md.liquid, or keep it knowing what it is. Its brand values were written in the day it was generated and nothing updates them once the app is gone, so it goes on telling agents whatever it last said. Deleting it puts Shopify’s own /agents.md back — the same file on every domain, which is where you started. If you had a template of your own before Umbrella, it is in snippets/umbrella-agents-backup.liquid.
- Remove any storefront blocks and snippets you added — announcement bar, top bar, social links, brand card, promotion popup. They are your own theme code and keep rendering whatever they were last given.
- If you installed the per-brand title snippet, put your theme’s own title back first. Installing umbrella-brand-head meant deleting your theme’s <title>, description and social tags from layout/theme.liquid. Deleting the snippet without restoring them leaves {% render %} pointing at a file that is gone, which outputs nothing at all — so every page would serve with no title. Restore the tags first, then remove the snippet. Left in place instead it is harmless: with no brand data to read it falls back to your theme’s own page title.
Still stuck?
Write to us. Include your .myshopify.com domain, the storefront URL where you see the problem, and the Build value from Settings › About in the app.