umbrella Multi Storefront & SEO

Blog · The Shopify Multi-Store SEO Playbook · Part 4

The Cloudflare setting that overrode our robots.txt

This one happened on Umbrella’s own site, not on the store. The robots.txt in our repo was not the one being served, and three AI crawlers were getting 403 on every page. It is in this series because the lesson applies to any domain with something in front of it.

Nifty Design Solutions · Published 30 October 2026 · The series

How we found it

On 20 October 2026 we audited our own site with the same checks this series runs on the store: fetch each file from outside and compare it with what we think we published. The repo’s robots.txt is 53 lines. It allows everything and lists the AI crawlers by name, on purpose, so the policy is a decision on record rather than a default.

The file served at umbrella.niftydesignsolutions.com/robots.txt began with roughly 130 lines we had never written: Cloudflare’s managed rules, disallowing AI training crawlers. And requests sent with GPTBot, ClaudeBot or CCBot user agents did not get the page at all. They got 403.

Nothing else showed it. The repo was right, the deploy was right, and the diff was empty. The site is on Cloudflare’s network, and the change was made on the way out.

The setting

It is in the Cloudflare dashboard for the zone, under Security › Settings › Configure AI bot policies. Two parts of it did this:

  • Training: Disallow. Blocks crawlers that collect content for model training. That is where the 403s came from.
  • Bot Preference Sync: on. Prepends Cloudflare’s own rules to your robots.txt, so the served file states the block too. That is where the extra 130 lines came from.

The setting applies to the whole zone. Ours is niftydesignsolutions.com, so it covered Umbrella’s subdomain and the company site alike.

What we changed

On 21 October 2026 we set all three categories to Allow and turned Bot Preference Sync off:

Cloudflare Configure AI bot policies: Search, Agent and Training each Allow (do not block), Enable Bot Preference Sync switched off
The zone’s AI bot policies after the change.

That is a choice for our site, not a recommendation for yours. A page that exists to explain what a product does is one we want agents to be able to read and quote. A site with different content may well want the block. What mattered was that the decision sat in our robots.txt where we could see it, not in a dashboard toggle that rewrote the file.

The check to keep

Fetch the file from outside and compare it with your source, then request a page as a crawler would:

curl -s https://your-domain.com/robots.txt | head -20
for ua in GPTBot/1.1 ClaudeBot/1.0 CCBot/2.0 Googlebot/2.1; do
  printf "%-14s " $ua
  curl -s -o /dev/null -w "%{http_code}\n" -A "Mozilla/5.0 (compatible; $ua)" https://your-domain.com/
done

Our site, on 23 October 2026:

GPTBot/1.1     200
ClaudeBot/1.0  200
CCBot/2.0      200
Googlebot/2.1  200

Two things that are not problems: Python’s default user agent still gets 403 from Cloudflare’s Browser Integrity Check on our site, which is meant to stop scripts that do not identify themselves, so set a user agent when you script this. And a user agent string proves nothing about who sent it; this test shows what the proxy does to a name, not what a real crawler will be served.

Does this affect a Shopify store?

It can. On our store, diviartsstudio.com is proxied through our own Cloudflare zone, so its storefront traffic passes through the same kind of settings. The other two brand domains point straight at Shopify. The robots.txt itself comes from the theme’s robots.txt.liquid, and your Shopify admin only ever shows you that version.

So we ran the same test on all three on 23 October 2026. Each returned 200 to all three crawler names, and each served the theme’s file, whose first line is Umbrella’s header, with nothing prepended:

www.diviartsstudio.com     200 200 200
www.shopfernandnest.com    200 200 200
www.foreverartify.com      200 200 200

If any proxy, CDN or bot-protection service sits in front of your storefront, run the check after every change to it. Whatever sits there can rewrite the file the theme generates, and nothing in Shopify will tell you.

Next

Part 5 goes back to the store: product structured data, and why ours contradicted the canonical until the JSON-LD was taught which brand a product belongs to.

Install on Shopify