Przejdź do treści

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

  1. Uzupełnij $adres_strony oraz listę stron statycznych, a sekcję z bazą danych odkomentuj, jeśli masz treści dynamiczne.
  2. Dodaj do .htaccess regułę RewriteRule ^sitemap\.xml$ sitemap.php [L], aby mapa była dostępna pod /sitemap.xml.
  3. Wskaż mapę w pliku robots.txt: Sitemap: https://twojadomena.pl/sitemap.xml.
  4. 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 priority i changefreq pominęliśmy celowo — Google oficjalnie je ignoruje, liczy się loc i sensowny lastmod.
  • Podawaj lastmod tylko 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