Spring naar hoofdtekst

Dynamische sitemap met XML en PHP

Geplaatst op door ,
Laatste aanpassing op .

Statisch

Een sitemap is een XML-bestand waarmee websites geautomatiseerd kunnen worden verkend door bijvoorbeeld een zoekmachine-bot. In dit bestand worden alle pagina's (URL's) opgenoemd, eventueel voorzien van hun datum van laatste wijziging. Een eenvoudig voorbeeld:

<?xml version="1.0" encoding="UTF-8"?>
<urlset
      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
  <loc>https://example.com/</loc>
</url>
<url>
  <loc>https://example.com/contact</loc>
</url>
<url>
  <loc>https://example.com/weblog</loc>
</url>
</urlset>

Dynamisch

Een eenvoudige sitemap bestaat uit statische URL's, pagina's waarvan het adres nooit wijzigt. Maar, wat als je een aantal dynamische pagina's - zoals een weblog - wil laten indexeren door de zoekmachines? Een script dat zo'n sitemap produceert zou er bijvoorbeeld als volgt kunnen uitzien:

<?php

$blogs = ...
$urlPrefix = 'https://example.com/blog';

$doc = new \DOMDocument();
$doc->formatOutput = true;
$doc->encoding = 'UTF-8';

$root = $doc->createElement('urlset');
$root->setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
$root->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
$root->setAttribute(
    'xsi:schemaLocation',
    'http://www.sitemaps.org/schemas/sitemap/0.9 '.
    'http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd'
);
$root = $doc->appendChild($root);

$nodeUrl = $doc->createElement('url');
$nodeLoc = $doc->createElement('loc', $urlPrefix);
$nodeUrl->appendChild($nodeLoc);
$root->appendChild($nodeUrl);

foreach ($blogs as $blog) {
    $nodeUrl = $doc->createElement('url');
    $nodeLoc = $doc->createElement('loc', $urlPrefix.'/'.$blog->getSeoTitle());
    $nodeUrl->appendChild($nodeLoc);
    $nodeLastMod = $doc->createElement(
        'lastmod',
        $blog->getDateTime()->format(\DateTime::W3C)
    );
    $nodeUrl->appendChild($nodeLastMod);
    $root->appendChild($nodeUrl);
}

header('Content-Type:application/xml');
print $doc->saveXML();
exit;

Combinatie

Tot slot kun je beide varianten ook nog combineren (zie hieronder). De eerste loc verwijst naar een eenvoudig XML-bestand met alle statische pagina's (home, contact…). De laatste loc verwijst naar het script dat een XML-bestand produceert op het moment van opvragen.

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-static.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap.php</loc>
  </sitemap>
</sitemapindex>

Dit bestand noem je sitemap.xml en meldt het aan bij bijvoorbeeld Google Webmaster Tools. Vanaf dat moment zal Google zowel de statische als dynamische pagina's van de website bezoeken en eventueel indexeren.

Inhoudsopgave

Atom-feed Atom-feed van FWiePs weblog

Artikelen


Doorzoek de onderstaande categorieën om de lijst met artikelen te filteren.