Why this guide is different
Most tutorials stop at “paste sitemap.xml and click Submit”. That part takes eleven seconds. The real work starts afterwards, when Search Console says Couldn’t fetch, the status sits on Pending for a week, or your pages end up in the dreaded Discovered – currently not indexed bucket.
This walkthrough covers both halves: what an XML sitemap actually is, how to find or generate yours on WordPress, Shopify and custom builds, the exact submission steps, and a troubleshooting section for every status Google throws at you.
What is a sitemap?
A sitemap is a file that lists the URLs on your website that you want search engines to know about. Think of it as a table of contents you hand to Googlebot so it does not have to discover every page by following links.
A sitemap does not guarantee indexing. It is a hint, not a command. What it does very well is speed up discovery, especially for new sites, large sites, sites with weak internal linking, and pages that are rarely linked from elsewhere.
What an XML sitemap contains
An XML sitemap is a plain text file written in a format Google understands. A minimal one looks like this:
<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>
<url>
<loc>https://www.example.com/blog/my-article/</loc>
<lastmod>2026-09-12</lastmod>
</url>
</urlset>
Here is what each tag does and whether Google pays attention to it:
| Tag | Purpose | Does Google use it? |
|---|---|---|
<loc> |
The full, absolute URL of the page | Yes, required |
<lastmod> |
Date of the last meaningful content change | Yes, if it is consistently accurate |
<changefreq> |
How often the page changes | No, ignored |
<priority> |
Relative importance from 0.0 to 1.0 | No, ignored |
<xhtml:link> |
Hreflang alternates for multilingual sites | Yes |
<image:image> / <video:video> |
Media associated with the page | Yes, for Image and Video search |
Hard limits to respect: 50,000 URLs and 50 MB uncompressed per sitemap file. Above that, split into several sitemaps and reference them from a sitemap index file (a sitemap that lists other sitemaps). That is exactly what WordPress SEO plugins do automatically.
XML sitemap vs HTML sitemap
People mix these up constantly. They are not the same thing and they do not replace each other.
| XML sitemap | HTML sitemap | |
|---|---|---|
| Audience | Search engine crawlers | Human visitors |
| Format | XML file, usually /sitemap.xml | A normal web page with links |
| Submitted to Search Console? | Yes | No |
| Main benefit | Faster URL discovery, metadata for media and hreflang | Navigation, usability, internal linking |
| Needed? | Recommended for almost every site | Optional, useful on large sites |
Note: Google also accepts an RSS/Atom feed or a plain text file with one URL per line as a sitemap. XML remains the best option because it supports the extra metadata.

Step 1: Find or generate your sitemap URL
Before you can submit anything, you need the exact address of your sitemap. Try these in your browser first:
https://yourdomain.com/sitemap.xmlhttps://yourdomain.com/sitemap_index.xmlhttps://yourdomain.com/wp-sitemap.xmlhttps://yourdomain.com/robots.txtand look for a line starting withSitemap:
WordPress
| Setup | Sitemap URL |
|---|---|
| WordPress core (no SEO plugin) | /wp-sitemap.xml |
| Yoast SEO | /sitemap_index.xml |
| Rank Math | /sitemap_index.xml |
| All in One SEO | /sitemap.xml |
| SEOPress | /sitemaps.xml |
In Yoast, activate it under Yoast SEO > Settings > Site features > XML sitemaps. In Rank Math, go to Rank Math > Sitemap Settings. Both let you exclude post types, taxonomies, attachment pages and noindexed content, which you should do.
Tip: if you install an SEO plugin, disable the WordPress core sitemap so you do not end up with two competing sitemaps. Most plugins handle this automatically.
Shopify
Every Shopify store generates a sitemap automatically at https://yourstore.com/sitemap.xml. It is a sitemap index that links to sub-sitemaps for products, collections, pages and blogs. You cannot edit it manually, but you can influence it:
- Only the primary domain sitemap is crawlable, so set your primary domain correctly in Settings > Domains.
- Hidden or unavailable products drop out of the sitemap automatically.
- On the Basic plan, password-protected stores return a sitemap that Google cannot fetch. Remove the storefront password before submitting.
- Some apps and themes let you exclude specific pages with a
noindextag, which also removes them from the sitemap.
Custom sites, headless and static builds
You have three options:
- Framework plugin. Next.js, Nuxt, Astro, Gatsby, Hugo, Laravel and Django all have sitemap packages that build the file during deployment. This is the best option because the sitemap stays in sync with your content.
- Crawler-based generator. Tools like Screaming Frog, XML-Sitemaps.com or similar crawl your live site and export an XML file you upload to your root folder. Fine for small, rarely updated sites, painful for anything dynamic.
- Hand-written file. Acceptable for a ten-page brochure site. Keep the encoding as UTF-8 and always use absolute URLs.
Whatever you choose, upload the file to your web root so it is reachable at https://yourdomain.com/sitemap.xml and returns a 200 status code.
Step 2: Verify your site in Google Search Console
You cannot submit a sitemap for a property you do not own. If Search Console is not set up yet:
- Go to Google Search Console and click Add property.
- Choose Domain (covers http, https, www and all subdomains, verified via a DNS TXT record) or URL prefix (verified via HTML file, HTML tag, Google Analytics or Google Tag Manager).
- Complete the verification. Domain properties are the cleaner choice if you have DNS access.
Important: the sitemap must belong to the same property. A sitemap hosted on a different domain or subdomain than the property will be rejected.

Step 3: How to submit a sitemap to Google Search Console
This is the core procedure, and it is identical for WordPress, Shopify, Wix, Webflow and custom sites.
- Open Google Search Console and select the correct property from the drop-down at the top left.
- In the left sidebar, under Indexing, click Sitemaps.
- In the Add a new sitemap field, type the path after your domain, for example
sitemap.xmlorsitemap_index.xml. The domain part is already filled in for you. - Click Submit.
- Refresh the page after a minute. Your sitemap appears in the Submitted sitemaps table with a status.
That is it. You do not need to submit the same sitemap twice, and you do not need to resubmit it every time you publish a post. Google re-reads it on its own schedule.
Should you submit sub-sitemaps individually?
If your main file is a sitemap index (it lists other sitemaps rather than URLs), submitting the index alone is enough. Google follows the links inside it.
That said, submitting the children as well (for example post-sitemap.xml, page-sitemap.xml, product-sitemap.xml) has one real advantage: the Sitemaps report then shows discovered URL counts per sitemap, which makes it much easier to see which content type Google is struggling with. There is no penalty for doing it.
Step 4: Add the sitemap line to robots.txt
Search Console submission covers Google. A line in robots.txt covers every other crawler, including Bing, DuckDuckGo and AI crawlers that respect the standard. Add this at the top or bottom of the file:
Sitemap: https://yourdomain.com/sitemap.xml
You can list several sitemap lines. On WordPress, Yoast and Rank Math add this automatically. On Shopify, it is included by default in the generated robots.txt.
Note on the old ping URL: the google.com/ping?sitemap= endpoint was deprecated and no longer does anything. Ignore any tutorial that still recommends it. Use Search Console plus robots.txt instead. For Bing and Yandex, use Bing Webmaster Tools and the IndexNow protocol.
Reading the Sitemaps report: what each status means
| Status | What it means | Action |
|---|---|---|
| Success | Google fetched and parsed the file | Nothing, move to the Pages report |
| Has errors | Parsed, but some entries are invalid | Click the row to see the specific error |
| Couldn’t fetch | Google could not download the file at all | Check URL, status code, robots.txt, firewall |
| Pending / could not be read | Queued or temporarily unreadable | Wait 24 to 72 hours before touching anything |

Troubleshooting: the problems everyone actually hits
“Couldn’t fetch” or “Sitemap could not be read”
Work through this list in order:
- Open the URL in a private browser window. If you see a 404, the path is wrong. If you see a login screen, the file is behind protection.
- Check for typos.
sitemap_index.xmlandsitemap-index.xmlare different files. Also check for a trailing slash or a duplicated domain in the field. - Check the protocol and host. Submitting a http sitemap inside a https property, or a non-www sitemap inside a www property, causes a fetch failure. They must match exactly.
- Check robots.txt. A rule such as
Disallow: /sitemap.xmlor a blanketDisallow: /on a staging environment will block it. - Check your firewall or CDN. Cloudflare bot rules, WAF settings and aggressive security plugins sometimes block Googlebot. Whitelist it.
- Check redirects. A sitemap that redirects to another URL can be read, but a redirect chain or a redirect to a 404 cannot.
- Use the URL Inspection tool on the sitemap URL itself to see exactly what Googlebot receives.
One more classic: the file is served with the wrong content type. It should be application/xml or text/xml, not text/html. Much the same conclusion turns up on seosly.com.
Status stuck on “Pending” for days
Pending is normal for the first 48 to 72 hours, and on brand-new domains it can last longer. Resubmitting every hour does not speed it up and can look like noise. What helps:
- Make sure the site has at least a few real inbound links so Google has a reason to crawl.
- Check Settings > Crawl stats to confirm Google is crawling your host at all.
- Confirm the server responds quickly. Slow or timing-out responses push crawling down the queue.
- If it is still Pending after a week, delete the sitemap entry and submit it again once.
“Has errors”: the common ones decoded
| Error message | Fix |
|---|---|
| URL not allowed / URL outside the property | Your sitemap lists URLs on a different domain or subdomain. Remove them or verify that host as a separate property. |
| Invalid date | Use the W3C format, e.g. 2026-09-30 or 2026-09-30T08:45:07+02:00. |
| Invalid XML / parsing error | Unescaped ampersands in URLs. Replace & with & inside loc tags. |
| Compression error | Re-generate the .gz file, or serve the uncompressed version. |
| Too many URLs | Split into multiple files under 50,000 URLs and use a sitemap index. |
| Empty sitemap | Your plugin excluded every post type, or all content is noindexed. Review plugin settings. |
“Discovered – currently not indexed”
This is the message that generates the most panic. It means Google knows the URL exists (usually thanks to your sitemap) but has not crawled it yet. Almost always it comes down to one of these:
- Crawl budget and server speed. Google delays crawling when the server is slow or returns errors. Improve TTFB and reduce 5xx responses.
- Low perceived value. Thin pages, near-duplicate product variants, tag archives and auto-generated pages are deprioritised. Consolidate or noindex them.
- Orphan pages. A URL that only exists in the sitemap and is not linked from anywhere else looks unimportant. Add internal links from relevant, already-indexed pages.
- Brand new site. Low authority means slow crawling. Time and a few quality links fix this.
What does not fix it: resubmitting the sitemap repeatedly. The URL is already discovered. The bottleneck is desire to crawl, not awareness.
“Crawled – currently not indexed”
Google visited the page and decided not to index it. This is a quality or duplication signal:
- Compare the page to what already ranks. Does it add anything new?
- Check for duplicate or near-duplicate content elsewhere on your site.
- Make sure the canonical tag points to itself and not to another page.
- Expand thin content, add unique text to category and product pages, remove boilerplate-only pages.
- Strengthen internal linking from your strongest pages.
The sitemap shows fewer URLs than expected
- Noindexed pages are excluded by most plugins by design. That is correct behaviour.
- Canonicalised duplicates are excluded too.
- On Shopify, unavailable or hidden products drop out automatically.
- Caching plugins sometimes serve a stale sitemap. Purge the cache and reload.
Old URLs keep reappearing
If deleted pages are still listed, your sitemap is being served from cache or generated from stale data. Clear the cache, regenerate the sitemap, and make sure removed URLs return a proper 404 or 410.
How to resubmit or remove a sitemap
To force a refresh after a big structural change:
- Go to Indexing > Sitemaps.
- Click the sitemap row, then the three-dot menu at the top right, then Remove sitemap. This only removes it from the report, not from Google’s index.
- Re-enter the path in Add a new sitemap and click Submit.
For a single urgent page, skip the sitemap entirely: paste the URL into the URL Inspection bar at the top of Search Console and click Request indexing. Use it sparingly, there is a daily quota.

Sitemap best practices checklist
- Include only canonical, indexable, 200-status URLs.
- Exclude noindex pages, redirects, 404s, parameter duplicates, admin and cart pages.
- Use absolute URLs with the correct protocol and host.
- Keep
lastmodaccurate. Faking it on every page daily teaches Google to ignore it. - Stay under 50,000 URLs and 50 MB per file.
- Reference the sitemap in robots.txt.
- Generate it dynamically so it updates when you publish.
- Re-check the Sitemaps report once a month, and immediately after a migration or redesign.
- Submit the same sitemap to Bing Webmaster Tools as well. It takes two minutes and feeds Bing, Yahoo and several AI search products.
FAQ
How do I submit my site to Google?
Verify your domain in Google Search Console, then submit your XML sitemap under Indexing > Sitemaps. For individual pages, use the URL Inspection tool and click Request indexing. There is no other submission form, and you never need to pay anyone to “submit your site to Google”.
Is it free to submit a sitemap to Google?
Yes. Google Search Console is completely free, and so is submitting a sitemap. Paid “search engine submission” services provide no advantage.
How do I resubmit my sitemap to Google Search Console?
Open Indexing > Sitemaps, remove the existing entry from the list, then add the sitemap path again and click Submit. In most cases this is unnecessary because Google re-fetches submitted sitemaps automatically.
How long does it take for Google to process a sitemap?
Processing usually happens within a few hours to a few days. Indexing of the URLs inside it is a separate process that can take days or weeks depending on site authority, content quality and crawl demand.
Do I need a sitemap if my site is small?
If your site has fewer than about 500 pages, all of them are well linked internally, and you have some external links, Google will likely find everything without a sitemap. Submitting one still costs nothing and gives you useful reporting data, so there is no good reason to skip it.
Can I submit more than one sitemap?
Yes. You can submit up to 500 sitemaps per property. Splitting by content type (posts, pages, products, images) makes diagnosing indexing gaps much easier.
Does submitting a sitemap guarantee indexing?
No. A sitemap helps Google discover URLs. Whether they get indexed depends on quality, uniqueness, internal linking and crawl demand.
What if my sitemap URL is not sitemap.xml?
That is fine. The filename does not matter as long as the file is valid XML, returns a 200 status, sits on the same host as your Search Console property, and is the path you enter in the Add a new sitemap field.
Need a second pair of eyes?
If your sitemap is submitted correctly and pages are still not indexed, the problem is usually further upstream: crawl budget, thin content, duplication or technical blocks. The PixelBright team audits exactly that. Get in touch and we will tell you what is really holding your pages back.