Web development

Search Console said 'Couldn't fetch' on a valid sitemap. Adding ?v=2 fixed it

By 4 min read

In short

The problem

Search Console showed 'Couldn't fetch' and then 'Sitemap could not be read' with 0 discovered pages for a sitemap that returned HTTP 200 and valid XML.

What fixed it

I proved the file was fine with curl, confirmed it with URL Inspection's live test, then submitted the same sitemap under sitemap.xml?v=2. Search Console treated it as a new sitemap and read all 70 URLs.

My sitemap was fine, and Search Console said it wasn't. This is what I checked, what moved it, and what I still can't claim to know.

I had just submitted sitemap.xml for kartik.contentcalendar.in. The Sitemaps report showed this:

text
Sitemap       Type     Submitted    Last read   Status          Discovered pages
/sitemap.xml  Unknown  25 Oct 2026  (blank)     Couldn't fetch  0

Opening the entry made it sound worse:

text
Last read: 25/10/2026
Discovered pages: 0
Sitemap could not be read

That message reads like a broken file, so I assumed I might have a bug.

First: prove the file is fine#

I did not touch any code. I fetched the sitemap the way a crawler would:

bash
curl -s -D - -A "Googlebot" https://kartik.contentcalendar.in/sitemap.xml
# HTTP/1.1 200 OK
# Content-Type: application/xml
# Content-Length: 11927

Then I checked the things that most often make Google reject a sitemap:

CheckResult
HTTP status200
Content-Typeapplication/xml
Well-formed XMLyes, parsed with a real XML parser, 70 <url> entries
Hidden BOM at the start of the filenone, it begins with <?xml
<lastmod> formatvalid ISO dates
URLsall on https://kartik.contentcalendar.in, no spaces or raw &
http:// versionredirects to https://
robots.txtAllow: /, sitemap listed, only /admin and /jobpilot blocked
Gzip and cache revalidation200 with gzip, 304 on a matching If-None-Match

Everything passed. In a Next.js project the sitemap comes from one sitemap.js route, so there was also nothing in the code that could differ between a browser and Googlebot.

Second: ask Google, not curl#

The most useful step was the URL Inspection tool. I pasted the sitemap URL into it. The stored result, from a crawl on 15 October, said:

text
Page indexing: Page is not indexed: Crawled - currently not indexed
Sitemaps:      Temporary processing error
Crawl allowed? Yes
Page fetch:    Successful

Two things in there are easy to misread:

  • "Crawled - currently not indexed" on a sitemap is normal. A sitemap is not a page that should appear in search results, so there is nothing to fix. I ignored that line.
  • "Temporary processing error" is the real clue. Page fetch: Successful and Crawl allowed: Yes mean Googlebot downloaded the file. The failure was in Google's processing of it, not on my server.

Then I clicked Test live URL:

text
URL is available to Google
Page can be indexed

That settled it. Google could fetch the file right now, so the stored failure was out of date.

The fix: submit it under a new URL#

Search Console identifies a submitted sitemap by its full URL, so I submitted the same file with a query string. In Sitemaps, I typed this into "Add a new sitemap":

text
sitemap.xml?v=2

My server returns the same sitemap for that URL, so the content is identical. The report then looked like this:

text
/sitemap.xml?v=2  Sitemap  25 Oct 2026  25 Oct 2026  Success         70
/sitemap.xml      Unknown  25 Oct 2026  (blank)      Couldn't fetch  0

All 70 URLs were discovered under ?v=2. The old /sitemap.xml entry kept its stale "Couldn't fetch" status, so I removed it from its three-dot menu.

What I can and can't claim#

The facts: the file was valid before and after, I changed nothing in the code, and a fresh submission under a new URL showed Success while the old entry stayed stuck.

My explanation is an inference. Search Console seems to keep the result of its first attempt against the submitted URL, and a new URL gets a new attempt. Google does not document this, so treat it as what worked for me, not a guarantee. I also can't tell you why the first attempt failed. "Temporary processing error" is the only reason I was given.

What I'd do again#

  1. Don't change code first. Run curl and a real XML parser before you edit a working sitemap. A fix to something that wasn't broken just adds new bugs.
  2. Use URL Inspection's live test. It answers "can Google reach this right now?", which the Sitemaps report doesn't.
  3. Ignore "Crawled - currently not indexed" on the sitemap URL. It is not a problem.
  4. Resubmit with ?v=2 before you wait days. Remove the old entry once the new one shows Success.
  5. Don't resubmit the same URL repeatedly. It gave me nothing; the new URL did.

If you hit the same status and your own curl checks pass, this is worth trying first. For the other Search Console problem I hit on this site, see Crawled - currently not indexed: the cause was 173 words.

  • seo
  • nextjs
  • search-console

Common questions

Why does Search Console say 'Couldn't fetch' for a sitemap that loads in my browser?

The status is Google's record of its last attempt, not a live check. If an attempt failed for a temporary reason, the sitemap can stay marked 'Couldn't fetch' even after the file is reachable. Test the URL with URL Inspection's live test to see whether Google can reach it right now.

What does adding ?v=2 to a sitemap URL do?

Search Console identifies a submitted sitemap by its full URL, so a different query string is a new submission and Google fetches it fresh. Your server returns the same file either way. Google does not document this behaviour, so treat it as something that worked, not a guarantee.

Is it safe to submit the same sitemap under two URLs?

Yes, for a short time. The URLs inside are identical, so nothing is duplicated in the index. Once the new entry shows Success, remove the old one from its three-dot menu.

Why does URL Inspection say my sitemap is 'Crawled - currently not indexed'?

A sitemap is not a page meant to appear in search results, so Google does not index it. That verdict on a sitemap URL is normal and can be ignored. The useful fields are page fetch and crawl allowed.

Share this

Post it to LinkedIn

One click opens LinkedIn with a ready-written post: a hook, the short version of this guide and the link. The caption is also copied, so you can paste it if it does not appear.

Post it to Instagram

Instagram has no web share link, so this gives you both pieces: copy the caption, save the card, then post it.

Save the card

Got this problem too?

Websites, web apps and SaaS products in React and Next.js, with the backend, payments and integrations they need to actually run a business.

see website and web app development work