Sitemap.xml — jak zgłosić do Google i przyspieszyć crawl [2026]
Sitemap.xml to mapa URL-i twojej strony dla Googlebota — pomaga z odkrywaniem, ale NIE gwarantuje indeksacji. W tym tutorialu pokazuję 4 metody zgłoszenia (GSC UI, robots.txt, IndexNow, programowe API), format
lastmod, sitemap-index dla dużych stron i 7 najczęstszych błędów technicznych.
TL;DR — Sitemap.xml w Google w 6 punktach
| # | Co | Detale |
|---|---|---|
| 1. Format | XML, max 50k URLi lub 50 MB | gzip OK |
| 2. Lokalizacja | Najczęściej /sitemap.xml w root | dowolna ścieżka, declaracja w robots.txt |
| 3. Submission | GSC → Sitemaps → wpisz URL | drugi: directive Sitemap: w robots.txt |
| 4. Lastmod | ISO 8601 (2026-05-03T20:14:00Z) | sygnał świeżości — Google używa |
| 5. Sitemap-index | Dla >50k URL-i lub modułowości | rekurencyjny — index linkuje do sub-sitemapów |
| 6. Limity | URL-e tylko canonical, 200 OK, bez noindex | NIE wkładaj 4xx, redirectów, noindex |
Zamów audyt SEO → jeśli twoja sitemap zawiera 100+ URL-i, ale Google indeksuje <30% z nich.
Czym jest sitemap.xml
Sitemap to plik XML zawierający listę URL-i strony, które właściciel chce, żeby Googlebot odkrył. To pierwsza warstwa komunikacji z wyszukiwarkami — mówi "tu jest moja strona, oto jej struktura".
Czego sitemap NIE robi
| Mit | Rzeczywistość |
|---|---|
| "Sitemap zaindeksuje moje URL-e" | Sitemap pomaga z odkrywaniem, NIE z indeksacją |
| "Im więcej URL-i w sitemap, tym lepiej dla SEO" | Lepiej 100 wartościowych URL-i niż 1000 mieszanych jakości |
| "Sitemap zwiększa ranking" | Sitemap to sygnał neutralny, NIE ranking factor |
| "Po dodaniu URLu do sitemap Google scrawluje natychmiast" | 1-30 dni typowo, zależnie od domain authority |
Czego sitemap ROBI
- Odkrywanie URL-i — Google nie musi crawlować całej strony przez internal links, sitemap podaje URL-e bezpośrednio
- Sygnał świeżości —
lastmodinformuje Google, że URL został zaktualizowany - Priorytet (deklaratywny) —
priorityto sugestia (od 0.0 do 1.0), Google traktuje ją jako wskazówkę, nie command - Hreflang dla multilingual — sitemap z
xhtml:linkdla każdej wersji językowej to najczystszy sposób deklarowania alternates - Diagnostyka w GSC — Sitemaps → status sitemap pokazuje liczbę URL-i submitted vs indexed
4 metody zgłoszenia sitemap
Metoda 1: Google Search Console UI (najczęstsza)
- Otwórz search.google.com/search-console
- Wybierz property
- W lewym menu: Sitemaps
- Wpisz URL sitemap (najczęściej
/sitemap.xml) i kliknij Submit - Odczekaj 1-7 dni, sprawdź status: "Success" lub "Couldn't fetch"
Plusy: najprostsze. Minusy: manualnie, jednokrotnie. Po pierwszym zgłoszeniu Google sam wraca do sitemap.
Metoda 2: Robots.txt directive (backup)
W pliku robots.txt w root domeny:
User-Agent: *
Allow: /
Sitemap: https://arduralab.com/sitemap.xml
Sitemap: https://arduralab.com/blog-sitemap.xml
Plusy: auto-discovery. Każdy bot (nie tylko Googlebot) może ją znaleźć — Bingbot, ApplebotChatbots, etc. Minusy: sam directive nie jest "submission" — Google sam musi zauważyć robots.txt zmiany.
Metoda 3: Ping endpoint (DEPRECATED — NIE używaj!)
Klasyczna metoda przed 2023:
https://www.google.com/ping?sitemap=https://twoja-domena.pl/sitemap.xml
Status: WYCOFANY w czerwcu 2023. Google ogłosił że ping endpoint został wyłączony. Wciąż widzisz to w starych tutorialach — ignoruj. Używaj GSC UI lub robots.txt directive.
Metoda 4: IndexNow (Bing/Yandex, Google testuje)
IndexNow to push-based protokół:
POST https://api.indexnow.org/indexnow
Content-Type: application/json
{
"host": "twoja-domena.pl",
"key": "abc123def456",
"urlList": [
"https://twoja-domena.pl/blog/post-1",
"https://twoja-domena.pl/blog/post-2"
]
}
Wymaga pliku https://twoja-domena.pl/abc123def456.txt z zawartością abc123def456 (autoryzacja przez plik).
Status: Bing + Yandex pełna obsługa. Cloudflare ma natywną integrację (Cloudflare Apps). Google testuje, status na 2026: niezadeklarowane wsparcie. Praktyka: używaj komplementarnie do sitemap dla Bing.
Format sitemap.xml — przykład
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://arduralab.com/blog/seo-roadmap-2026-2027</loc>
<lastmod>2026-05-01T10:30:00+02:00</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
<xhtml:link rel="alternate" hreflang="pl" href="https://arduralab.com/blog/seo-roadmap-2026-2027"/>
<xhtml:link rel="alternate" hreflang="en" href="https://arduralab.com/en/blog/seo-roadmap-2026-2027"/>
</url>
</urlset>
Pola — co liczy się dla Google
| Pole | Czy używane? | Notatka |
|---|---|---|
loc | ✅ ZAWSZE | URL canonical, 200 OK |
lastmod | ✅ TAK | Google używa do crawl scheduling |
changefreq | ⚠️ Limit | Google traktuje jako wskazówkę, nie hard rule |
priority | ⚠️ Limit | Google ignoruje od 2017 (oficjalnie) |
xhtml:link | ✅ TAK | Hreflang — najczystsza metoda |
Wniosek praktyczny: loc + lastmod + ewentualnie xhtml:link dla hreflang. Pomijaj changefreq i priority — generujesz tylko noise.
Sitemap-index dla dużych stron
Limity standardowego sitemap
- 50 000 URL-i max
- 50 MB max (przed kompresją gzip — z gzip można 200+ MB)
Struktura sitemap-index
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://arduralab.com/sitemap-blog.xml</loc>
<lastmod>2026-05-03</lastmod>
</sitemap>
<sitemap>
<loc>https://arduralab.com/sitemap-services.xml</loc>
<lastmod>2026-05-01</lastmod>
</sitemap>
<sitemap>
<loc>https://arduralab.com/sitemap-glossary.xml</loc>
<lastmod>2026-04-29</lastmod>
</sitemap>
</sitemapindex>
Kiedy używać sitemap-index
- ✅ >50k URL-i (forced)
- ✅ Multi-section strony (blog, sklep, słownik) — modularność ułatwia debug
- ✅ E-commerce z wieloma kategoriami — osobne sitemap per kategoria
- ❌ Mała strona <500 URL-i — niepotrzebna abstraction
Sitemap-index w Next.js / Astro
Większość frameworków auto-generuje sitemap-index przy build:
- Next.js 16: built-in
sitemap.tszgenerateSitemapsexports → multiple sub-sitemaps - Astro 5:
@astrojs/sitemapintegration auto-tworzy index dla >5k URL-i
7 najczęstszych błędów (i jak naprawić)
1. URL-e z noindex w sitemap
Problem: Sitemap mówi "to ważne", noindex mówi "nie indeksuj". Sprzeczny sygnał, Google ignoruje.
Fix: Filtr w generatorze sitemap — wykluczaj URL-e z noindex w <meta name="robots">. Sprawdź przez curl -s URL | grep "noindex".
2. URL-e 4xx/5xx w sitemap
Problem: Sitemap zawiera URL-e zwracające 404 (usunięte), 410 (gone) lub 500.
Fix: Pre-deploy validator — sprawdza status HTTP każdego URL-u w sitemap. Skrypt:
while read url; do
status=$(curl -o /dev/null -s -w "%{http_code}" "$url")
echo "$status $url"
done < <(curl -s https://twoja-domena.pl/sitemap.xml | grep -oP '(?<=<loc>)[^<]+')
3. Stale lastmod (zawsze ten sam)
Problem: lastmod jest aktualizowany przy każdym deployu na ten sam timestamp dla wszystkich URL-i, mimo że tylko 5 zostało zmienionych.
Fix: Lastmod per URL z prawdziwym czasem ostatniej zmiany contentu. Frameworki: Next.js → git log --format=%aI -1 -- file.mdx, Astro → import.meta.glob z eager + filesystem mtime.
4. Sitemap >50 MB bez gzip
Problem: Plik się dziurawi, Google odmawia parsowania.
Fix: Skompresuj do sitemap.xml.gz (Cloudflare/CDN robi auto). Zrestartuj sub-sitemapy do <50k URL-i.
5. Brak hreflang w sitemap multilingual
Problem: Strona PL+EN, ale każdy URL ma własny sitemap entry bez xhtml:link — Google nie wie, że są wersjami siebie.
Fix: Każdy URL w sitemap musi mieć xhtml:link dla każdej wersji językowej (włącznie z self-reference). Generator sitemap musi to robić.
6. Linki canonical sprzeczne z sitemap
Problem: Sitemap zawiera URL_A, ale strona ma <link rel="canonical" href="URL_B">. Google ufa canonical, ignoruje sitemap entry.
Fix: Sitemap zawsze zawiera canonical URL — nie variant. Audyt: curl -s URL | grep canonical — porównaj z URL w sitemap.
7. Sitemap nie odświeża się przy deploy
Problem: Sitemap jest cache'owany 24h+ przez CDN. Po deployu nowych blogów Google widzi stary sitemap.
Fix: Cache control header dla sitemap = max-age=300 (5 min). Cloudflare: Page Rules → URL pattern */sitemap* → Cache Level: Bypass.
Jak monitorować skuteczność sitemap
W GSC Sitemaps tab
- Discovered — Google zauważył sitemap (czas: 1-7 dni)
- Submitted — Google przyjął URLe z sitemap do crawl queue
- Indexed (osobno w Coverage) — ile URLi z sitemap faktycznie zaindeksowane
Hard truth: dla świeżych domen typowo 10-30% URLi z sitemap zostaje zindeksowane w pierwszym kwartale. Dla domen z DR 30+ — 60-80%.
W GSC Coverage Report
- Submitted and indexed — sitemap się sprawdza
- Submitted, currently not indexed — Google zauważył ale zdecydował nie indeksować (najczęstszy stan dla nowych domen)
- Discovered, currently not indexed — Google znalazł ale jeszcze nie scrawlował (crawl budget issue)
Jeśli >50% URL-i wpada w "Discovered, not indexed" — masz crawl budget problem. Rozważ Indexing API jako force-crawl.
FAQ — najczęstsze pytania
Czy mogę mieć kilka sitemap dla tej samej property?
Tak. Możesz zgłosić wiele sitemap niezależnie — sitemap.xml, blog-sitemap.xml, news-sitemap.xml. Najprościej jednak — sitemap-index linkujący do wszystkich. Limit per property w GSC: 500 sitemap.
Co z <image:image> i <video:video>?
Specjalne extensions sitemap dla obrazów i video. Używaj jeśli masz dużo unikalnego image content (e-commerce, gallery sites) lub video. Dla typowego bloga — opcjonalne, mały impact.
Czy sitemap zastępuje sitemap.xml dla AI crawlerów?
Nie. AI crawlerzy (GPTBot, ClaudeBot, PerplexityBot) używają llms.txt i llms-full.txt jako swojego "sitemap". Sitemap.xml + llms.txt to komplementarne — pierwszy dla wyszukiwarek, drugi dla LLM-ów.
Jak długo trzymać 301 redirecty w sitemap?
Krótko (1-3 mies.). Po deployu nowych URL-i, dodaj 301 source URLs do sitemap, żeby Google szybko zauważył redirect. Po 1-3 mies. usuń je — niepotrzebne wpisy zaśmiecają.
Czy sitemap musi być statyczny czy może być generowany dynamicznie?
Może być dynamiczny (np. Next.js sitemap.ts, Astro plugin), ale ważne: musi być cacheable + stabilne. Nie generuj różnej treści za każdym requestem (Google wykryje i ignoruje).
Co to jest priority i czy ją używać?
priority w sitemap (0.0-1.0) to wartość deklaratywna. Google ogłosił w 2017, że ignoruje to pole. Pozostaw default (0.5) lub usuń całkiem.
Co dalej
- Sprawdź swoją sitemap teraz —
curl -s https://twoja-domena.pl/sitemap.xml | head -20i policz URL-e:curl -s ... | grep -c "<loc>" - Audyt 7 błędów — przejdź checklist powyżej i napraw każdy znaleziony
- Zgłoś przez GSC jeśli jeszcze nie zgłoszone
- Czytaj dalej:
Zamów audyt SEO
Sitemap zawiera 100+ URL-i, ale Google indeksuje <30% z nich? Zamów audyt SEO → — sprawdzimy 7 najczęstszych przyczyn (canonical, noindex, thin content, crawl budget) i wdrożymy strategię force-indexowania.