Short answer. The status means Googlebot did not get a usable response when it called, not that your store crashed. Google's own crawl documentation files a 429 rate limit as a server error too, so the label cannot tell you which code arrived. Read the Crawl stats report, not the live test: the live test fetches the page now, and the failure happened then.
A merchant opens Search Console, finds a block of product URLs filed under Server error (5xx), and goes looking for an outage. There was no outage. Shopify's status page is green for the period, the store took orders throughout, and every one of the flagged URLs loads in a browser on the first try.
That combination is not a contradiction and it is not a Search Console bug. It is what the status looks like when the failure was brief, or when it was produced by something other than a crash. The report is telling you something true and narrow: at the moment Googlebot asked for these URLs, it did not get an answer it could use. Everything interesting is in the gap between that sentence and the word "5xx".
What the label covers, and the one 4xx that lands inside it
Google's Page indexing report documentation defines the status in one line, and it sits alongside every other status in that report: "Your server returned a 500-level error when the page was requested." Read on its own, that sends you looking for a 500, a 502 or a 503.
Now read Google's documentation on HTTP status codes and network errors, which describes how the crawler behaves rather than how the report is worded. It says: "Google's crawlers treat the 429 status code as a signal that the server is overloaded, and it's considered a server error." And it makes that the single exception in an otherwise uniform family: "All 4xx errors, except 429, are treated the same: Google crawlers inform the next processing system that the content doesn't exist."
A 429 is Too Many Requests. It is not a crash; it is a refusal to serve right now, issued deliberately by something that decided the request rate was too high. On the crawl side Google files it with the server errors, and every other 4xx it files under "this page does not exist". So one 4xx behaves like a 5xx, and its neighbours behave like a 404. That is worth knowing before you start reading a log.
The practical consequence is that Server error (5xx) is a bucket, not a diagnosis, and a genuine 500-level error and a 429 need opposite responses. A genuine 500-level error means something broke and you find it. A 429 means something worked exactly as configured and refused a caller, and the fix is to change the configuration or the caller, not to hunt for a fault. You cannot tell which you have from the status name, which is why the procedure below starts by finding the code.
Shopify documents both codes, and it is worth being precise about where. Its API response codes reference covers its APIs, not storefront web pages, and there it defines 429 as "The request wasn't accepted because the app has exceeded the rate limit" and 430 as "The request wasn't accepted because it might be malicious, and Shopify rejected it to protect the app from any possible attacks." For 503 it says "The server is currently unavailable. Check the Shopify status page for reported service outages." Those are API semantics. They tell you the codes exist in Shopify's vocabulary; they are not a statement about what a storefront returns to a crawler, and this article does not treat them as one.
The page passes when you test it, because you are testing now
A live test is the obvious next move, and the reason it settles nothing is documented. Google's URL Inspection documentation draws a hard line between two results that sit in the same panel. Of the indexed result it says: "This is not a live test. The results shown are from most recently indexed version of a page, not the live version on the web." And: "All information shown in this tool is derived from this last crawled version." Of the other button: "This is a live test: the tool fetches and examines the URL in real time."
So a passing live test and a failing indexed status are not in conflict. One is a measurement of your store this second; the other is a record of a request that happened on a date you were not watching. Google says so plainly in the same document: "Your page may have changed or become unavailable since Google last saw it."
A merchant who reads the live test as the verdict concludes the report is stale and closes it. On a rate limit that lasted a few minutes, or an availability blip inside one datacentre, the live test will pass every time you press it, for as long as you care to keep pressing. The failure is not reproducible on demand, and a check that only ever runs on demand cannot see it. That gap is the subject of what actually tells you a Shopify product lost its Google visibility. You can watch it play out in a Shopify Community thread of 13 March 2024, where a merchant reports the flag and adds that "When I click on the link that google console provides it directs me to the correct page."
StoreCanary checks this on your store
Not sure if this is happening on your store right now? We request every URL in your public catalogue the way a crawler does and record the status code each one returns, so a page that answers a browser but not a crawler shows up as a finding rather than as a hunch: read-only, no admin access, about 2 minutes.
Scan my store for freeThe most expensive 5xx is the one on /robots.txt
Every crawler asks for /robots.txt before it asks for anything else. That makes it the one URL on your domain every crawler requests, and it puts it in front of any rule that counts requests. It is also the one URL whose failure is not page-level.
Google's robots.txt reference sets out what happens when that file returns a server error: "For the first 12 hours, Google stops crawling the site but keeps trying to fetch the robots.txt file. If Google can't fetch a new version, for the next 30 days Google will use the last good version, while still trying to fetch a new version."
Twelve hours of no crawling, from one file, on a response nothing in Shopify admin records. Nothing in that sequence produces an alert, and the recovery is automatic, so a store can spend half a day invisible to Googlebot and show no trace of it afterwards except a dip in the very report people read last.
The same reference handles the 4xx family the way the crawl documentation does, with the same carve-out: "Google's crawlers treat all 4xx errors, except 429, as if a valid robots.txt file didn't exist." A 404 on /robots.txt is therefore harmless, and treated as permission to crawl everything. The exception is named but its branch is not spelled out on that page, so joining it to the server-error rule above is an inference, not documentation: the crawl documentation says a 429 is considered a server error, and this page says a server error on robots.txt stops crawling for twelve hours. Both sentences are quoted above and linked, and a reader who wants to check the join can. What is documented either way is that 429 is the one 4xx that does not simply mean "no file here", and that makes it the code worth ruling out first on the one URL where the cost is site-wide.
A platform-generated file that Google cannot fetch is a familiar shape on Shopify: the sitemap version of it, where the file is healthy and the address is not, is covered separately. This is also a different failure from a robots.txt that loads perfectly and tells Google to stay away from your products; that one has its own article on Shopify robots.txt rules blocking products. Here the file is fine and the fetch is not.
What a Shopify robots.txt leaves crawlable: eleven storefronts, measured
Because the file matters this much, it is worth knowing what is actually in it rather than what the platform is assumed to do. On 30 September 2026 we requested the root URL and /robots.txt of twelve live storefronts, presenting Googlebot's user agent and following redirects. Eleven served a robots.txt, and all eleven were Shopify-served on at least one platform-specific signal: Shopify's own server-timing fields in the response headers, or the oseid and preview_theme_id disallow rules Shopify generates. Twelve storefronts is a sample and nothing below is a rate.
Across those eleven files:
- Variant URLs were disallowed on none of them. Not one file carried a rule matching
?variant=, so every colour and size of every product is a separately fetchable URL by default. - Storefront search URLs were disallowed on five of eleven. Of the six where they were not, five carried the platform's unmodified file — 116 lines, 50 disallow rules — and the sixth carried a hand-written 18-line replacement. A store's own search endpoint generates URLs on demand, without limit, from whatever anybody or anything types.
- Multi-filter collection URLs were disallowed on nine of eleven, and
sort_byvariants on ten of eleven. Those are rules the default does carry. Note the shape of the first one: it matches a URL with two or more filters, so a single-filter collection URL is not covered by it. - A
Crawl-delaydirective was present on six of eleven. Google's robots.txt reference lists the fields it reads and adds, in the same sentence, "Google supports the following fields (other fields such ascrawl-delayaren't supported)". So on six of eleven storefronts there is a rule intended to slow crawling that Googlebot does not read.
That last finding is the one to act on, because it is a remedy that looks like it worked. A Crawl-delay added after an aggressive crawl episode will calm the crawlers that honour it and will do nothing whatsoever to Googlebot, while leaving the person who added it believing the problem is handled. It also outlives its reason: the rule lives in a theme file, not in the admin, and a rule nobody can see is a rule nobody revisits.
The twelfth domain is the part of the probe worth reporting on its own. It answered a single request with HTTP 429 — on the root URL and on /robots.txt alike — from a server that identified itself as Vercel, with none of Shopify's own header fields present. We are explicit about what that does and does not show. Our request came from a datacentre address and Google crawls from ranges it publishes, so this is not evidence that any store rate-limits Googlebot. What it demonstrates is narrower and still useful: the code is live in front of real storefronts, one ordinary request was enough to meet it, and /robots.txt was not exempt. Reachability is a property of the request, not of the URL, which is the same asymmetry behind Merchant Center reporting a product page unavailable on a page that works.
One more header is worth a look while you are in there. Eight of the twelve responses carried Shopify's own server-timing field reporting its processing duration, ranging from 29 ms to 416 ms, with a separate render figure of up to 256 ms on one storefront. That is Shopify telling you how long it took to build the page, on every response, with no tool required.
How to find out which code Googlebot actually received
Neither of the threads discussed below names the report that answers this, so it is worth naming: it is Crawl stats, in Settings, and it is the one screen that reports what came back to Googlebot across the whole site, rather than what a single page does now.
- Open Settings → Crawl stats and read the response breakdown. Google's documentation for the report describes a Crawl responses section that groups fetches by what came back, with separate rows for Server error (5XX), Other client error (4XX) and robots.txt not available. Before you conclude the report is empty, check the property type: Google states "This report is available only for root-level properties."
- Open Host status and read the Server connectivity graph. Google describes it as showing "when your server was unresponsive or did not provide a full response for a URL during a crawl", and warns at the top level when "Google encountered at least one significant crawl availability issue in the last week on your site". Write the dates down. A date is what lets you line the failure up against your own change log, and nothing else in Search Console gives you one.
- Check whether
/robots.txtwas among the failures, using the row named for it. If it was, stop looking at products: per the twelve-hour rule in the previous section, that failure is site-wide and it explains page-level symptoms all by itself. - Compare the affected URL count with your product count. If the report names thousands of URLs on a catalogue of a few hundred products, you are looking at URLs, not products — and the classes measured in the previous section are where the extra ones come from. Google also notes that "the list of example URLs in the report is limited to 1,000 items, and isn't guaranteed to show all URLs in a given status", so the sample you can read is not the population. Why a Shopify store presents many times more URLs than it has products is covered in the article on "Discovered - currently not indexed", and there is no need to repeat it here.
- Read your own
robots.txtand check it against the four rule classes above, rather than assuming the platform default covers them. In particular, look for aCrawl-delaythat Googlebot is not reading. - Request your storefront and read the response headers. If Shopify's
server-timingfields are absent, something in front of the store answered, and that layer can refuse a request Shopify never sees. Your DNS provider and any proxy, firewall or edge service in the path are the candidates. - Validate, and record the date you did it. Google's instruction is that "After you fix all instances of a specific issue on your site, you can ask Google to confirm your fixes." If the status clears with no change from you, the failure was transient, and the useful question stops being "what is broken" and becomes "what makes this recur".
Two dated threads show how far the ranking answers get without that report. In a Shopify Community thread opened on 19 June 2024, a merchant reports 5,000 URLs not indexed across eight reasons, Server error (5xx) among them, on a store of 170 products. Six replies follow, the last in March 2025, covering variant duplicates, canonical selection and a robots.txt edit. Across those six replies, rate limiting, 429 and the Crawl stats report are not named. In a second thread from 13 March 2024, a merchant reports the flag on three pages and notes that the link Search Console gives them opens the correct page; the one substantive reply is to contact Shopify Support. Neither thread reaches the response breakdown, and both held page one for this problem when we measured it on 30 September 2026.
The causes, and which ones are yours
Ordered by how quickly you can rule each one out, not by how often we see it. Our scanner records the status code a URL returns to a crawler; it has no view into Shopify's internals or your provider's rate rules, so a frequency ranking here would be a number we do not have.
A layer in front of Shopify. The cheapest to check, because it shows in a response header: a proxy, firewall, bot-management service or edge platform in the path can answer before Shopify does, and can refuse on its own criteria. This cause has its own article, on who is actually refusing Googlebot when Search Console reports a 403, and the cast of refusers there is the same cast here. The code differs and the consequence differs — a 403 reads to Google as "does not exist", a 429 as a server error — so read that article for the inventory and stay here for what the response does to your index.
A rate rule meeting a crawler that asks for a lot. Crawl demand follows from how many URLs you offer, and the four rule classes measured above are how that number grows without anybody adding a product. A rate threshold set against human traffic can be met by a crawler working through that list.
Something the page calls while Shopify renders it. An app proxy route or a server-side call made during rendering is inside the response, so its failure can become the response's own status. This is distinct from a slow or broken third-party script in the browser, which does not change the document's status code. Shopify's processing and render timings, measured above, are the visible edge of this: they are what Shopify spent on the page before it left.
A genuine Shopify incident. Not the first cause to rule in, but it is the one cause you can check against an external record. Like the phantom noindex, it is a case where Shopify admin and the public response disagree with neither screen saying so. Take the dates from the Host status graph and compare them with Shopify's own status history; Shopify's API reference points at that page for a 503. If the dates do not line up, the cause is in your configuration or in front of it.
The URL was never meant to be fetched. Some of what sits in the report is not your product catalogue at all. A collection-scoped duplicate of a product URL is a fetch spent on a page you did not intend Google to index in the first place, and what Google does with those collection URLs is its own subject. Clearing them out of the crawl is worth doing on its own merits, and it reduces the demand described two paragraphs up.
Why it comes back, and what Google's remedy assumes you control
What makes this status a monitoring problem rather than a repair is that the conditions that produce it are all conditions that return. A rate rule tightened after a scraping episode stays tight. A new app adds routes. A market or a language adds URLs. A seasonal traffic peak raises the baseline that a threshold was set against. None of those is an outage, none of them announces itself, and each of them can put Googlebot back in the same position as before, for minutes at a time, on a schedule nobody is watching.
The cost of an episode is not only the pages named in the report. Google's HTTP status documentation states that "5xx and 429 server errors prompt Google's crawlers to temporarily slow down with crawling", so a failure on some URLs buys fewer fetches for all of them. And on what happens to the pages themselves: "For Google Search, already indexed URLs are preserved in the index, but eventually dropped."
That sentence is what separates this status from the ones it sits next to in the same report. "Discovered - currently not indexed" and "Crawled - currently not indexed" describe pages you never had: nothing was withdrawn, because nothing was ever granted. A sustained server error runs the other way and spends pages you already hold. The arrow is reversed, and so is the urgency.
There is one more asymmetry, and it is specific to running on a hosted platform. Google's Crawl stats documentation says of 5xx responses that "These errors cause availability warnings and should be fixed if possible", and offers the operator's lever: "If Google is overcrawling your site, you can request a lower crawl rate." Elsewhere it advises returning a deliberate 503 or 429 when nearing a serving limit. That advice is written for someone who controls the server. On Shopify you do not choose what your storefront returns under load, you cannot instrument it, and you have no access to the log that would tell you what it returned yesterday. The lever you do have is the crawl-rate request, and the knowledge of which URL classes you are offering.
Which leaves one honest conclusion about this status on this platform: the diagnosis lives in three places at once — Google's report, your own robots.txt and theme, and whatever sits in front of your domain — and no single one of them is authoritative, because no single one of them owns the failure. The store looks healthy in Shopify admin throughout, because in Shopify the product really is fine. The first place the cost appears is a different report, weeks later, as a status change you did not go looking for. If you want to know the next time it happens rather than the next time you read the report, that is a monitoring question, and the rest of the map of silent Google visibility failures is built on the same observation.
Is this happening on your store right now?
Search Console will not page you when this happens. The product page loads fine in a browser, Shopify admin shows the product active, and Google quietly slows down or drops it anyway. The only way to know is to check the pages the way Google sees them.
- 90+ checks, the way Google crawls and indexes your store. Status codes, noindex tags, canonicals, redirects, robots.txt, sitemap coverage.
- Read-only. No app to install, no admin access, nothing changes on your store.
- The exact fix for each page, in plain English, so you or your developer can act the same day.
Across full-catalog scans of more than 90,000 Shopify product pages, roughly 46% of stores had at least one critical Google visibility issue.
Scan my store for freeFree scan: issue types, counts and first fixes. Full report on every product page, not a sample: $49 once, no subscription.