Generator mapy strony (sitemap.xml)
- WWW i API
- poziom: średni
- aktualizacja: 12 lipca 2026
Mapa strony to plik XML, dzięki któremu Google i Bing szybciej znajdują wszystkie Twoje podstrony. Ten skrypt generuje ją automatycznie: część adresów podajesz w tablicy, a resztę (artykuły, produkty) dociąga z bazy danych — mapa aktualizuje się więc sama.
PHP
72 linii
Pobierz .php
<?php
/**
* Generator sitemap.xml — skryptyPHP.com
* Zapisz jako: sitemap.php
*
* Wariant A (dynamicznie): mapa generuje się przy każdym pobraniu.
* W .htaccess dodaj: RewriteRule ^sitemap\.xml$ sitemap.php [L]
* Wariant B (statycznie): odkomentuj zapis do pliku na końcu skryptu
* i uruchamiaj skrypt np. raz dziennie (cron).
*/
// ── USTAWIENIA ──────────────────────────────────────────────
$adres_strony = 'https://twojadomena.pl'; // bez ukośnika na końcu
// Strony statyczne: adres względny + data ostatniej zmiany (lub null)
$strony = [
['adres' => '/', 'lastmod' => null],
['adres' => '/o-nas/', 'lastmod' => '2026-05-20'],
['adres' => '/oferta/', 'lastmod' => '2026-06-15'],
['adres' => '/kontakt/', 'lastmod' => null],
];
// Wpisy dynamiczne z bazy — odkomentuj i dostosuj:
// require 'baza.php';
// $pdo = polacz_z_baza();
// $artykuly = $pdo->query(
// 'SELECT slug, DATE(zmieniono) AS lastmod FROM artykuly WHERE opublikowany = 1'
// )->fetchAll();
// foreach ($artykuly as $a) {
// $strony[] = [
// 'adres' => '/artykul/' . $a['slug'] . '/',
// 'lastmod' => $a['lastmod'],
// ];
// }
// ── GENEROWANIE XML ─────────────────────────────────────────
/**
* Buduje treść sitemap.xml z listy stron.
*/
function generuj_sitemap(string $adresStrony, array $strony): string
{
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
$xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
foreach ($strony as $strona) {
$pelnyAdres = $adresStrony . $strona['adres'];
$xml .= " <url>\n";
$xml .= ' <loc>'
. htmlspecialchars($pelnyAdres, ENT_XML1 | ENT_QUOTES, 'UTF-8')
. "</loc>\n";
if (!empty($strona['lastmod'])) {
$xml .= ' <lastmod>' . $strona['lastmod'] . "</lastmod>\n";
}
$xml .= " </url>\n";
}
$xml .= '</urlset>';
return $xml;
}
$sitemap = generuj_sitemap($adres_strony, $strony);
// Wariant A: wysyłka do przeglądarki/robota
header('Content-Type: application/xml; charset=UTF-8');
echo $sitemap;
// Wariant B: zapis statycznego pliku (np. wywoływany z crona)
// file_put_contents(__DIR__ . '/sitemap.xml', $sitemap, LOCK_EX);
// echo 'Zapisano sitemap.xml (' . count($strony) . ' adresów)';
Jak użyć tego skryptu
- Uzupełnij
$adres_stronyoraz listę stron statycznych, a sekcję z bazą danych odkomentuj, jeśli masz treści dynamiczne. - Dodaj do
.htaccessregułęRewriteRule ^sitemap\.xml$ sitemap.php [L], aby mapa była dostępna pod/sitemap.xml. - Wskaż mapę w pliku
robots.txt:Sitemap: https://twojadomena.pl/sitemap.xml. - Zgłoś mapę w Google Search Console (sekcja „Mapy witryn") — zobaczysz tam też, czy Google ją poprawnie czyta.
Warto wiedzieć
- Adresy przechodzą przez
htmlspecialchars(..., ENT_XML1)— znaki takie jak&w adresach nie zepsują XML-a. - Znaczniki
priorityichangefreqpominęliśmy celowo — Google oficjalnie je ignoruje, liczy sięloci sensownylastmod. - Podawaj
lastmodtylko wtedy, gdy jest prawdziwy (np. z kolumny w bazie) — sztuczne „zawsze dzisiaj" może obniżyć zaufanie robota do mapy. - Limit pojedynczej mapy to 50 000 adresów lub 50 MB — przy większych serwisach dzieli się ją na kilka plików spiętych indeksem map.
#sitemap
#seo
#xml
#google
#search console
Podobne skrypty
WWW i API
Pobieranie danych z API (cURL + JSON) na przykładzie kursów NBP
Uniwersalna funkcja pobierania JSON-a z dowolnego API przez cURL — z limitem czasu, obsługą błędów i buforowaniem do pliku. Przykład: aktualne kursy walut z API NBP.
średni Zobacz kod → WWW i APIWłasny skracacz linków (bez bazy danych)
Miniskracacz URL w jednym pliku: krótkie kody generowane z random_int(), zapis w pliku JSON z blokadą, przekierowania 301 i licznik kliknięć.
średni Zobacz kod → WWW i APIObsługa ciasteczek (cookies) + baner zgody bez JavaScriptu
Nowoczesna obsługa cookies w PHP: zapis z flagami SameSite/Secure/HttpOnly, odczyt, usuwanie oraz prosty baner informacyjny o ciasteczkach działający bez JavaScriptu.
początkujący Zobacz kod →