Google Sitemap mit PHP und DOM erstellen (Document Object Model)
Hier ein kleine Vorlage für alle Entwickler, die eine Google-Sitemap mit Hilfe von PHP selbst erstellen wollen. Bei der Google-Suche hatte ich leider nichts zu diesem Thema gefunden.
Um eine eigene Google-Sitemap mit Hilfe von PHP für administrator.de zu erstellen, habe mich für die DOM Schnittstelle (Document Object Model) entschieden. Da wir mehr als 50.000 Beiträge haben, muss ich eine Sitemap-Index Datei erstellen und die Inhalte auf mehrere Sitemap Dateien aufteilen. Infos und Hilfen zum Sitemap-Protokoll findet Ihr hier. Die Werte sind natürlich nur Beispielswerte, die muss jeder selbst anhand seiner Programmierung und Datenbank ausfüllen. Es geht nur um die reine XML Struktur per DOM und nicht um die Inhalte. Tipp: Das Entity-Escaping macht die DOM-Schnittstelle automatisch, man muss seine URLs also nicht extra mit "htmlspecialchars" umwandeln.
Hier die Sitemap-Index Datei:
Hier die Sitemap Datei:
Ergebnis "sitemap-index.xml":
Ergebnis "sitemap.xml":
Weitere Informationen über Google-Sitemaps und genaue Feldbeschreibungen findet Ihr unter:
http://www.sitemaps.org/de/protocol.php
https://www.google.com/webmasters/tools/docs/de/protocol.html
Google-Sitemaps validieren bzw. überprüfen:
http://www.validome.org/google/lang/ge
Viel Spaß noch
Gruß
Frank
Um eine eigene Google-Sitemap mit Hilfe von PHP für administrator.de zu erstellen, habe mich für die DOM Schnittstelle (Document Object Model) entschieden. Da wir mehr als 50.000 Beiträge haben, muss ich eine Sitemap-Index Datei erstellen und die Inhalte auf mehrere Sitemap Dateien aufteilen. Infos und Hilfen zum Sitemap-Protokoll findet Ihr hier. Die Werte sind natürlich nur Beispielswerte, die muss jeder selbst anhand seiner Programmierung und Datenbank ausfüllen. Es geht nur um die reine XML Struktur per DOM und nicht um die Inhalte. Tipp: Das Entity-Escaping macht die DOM-Schnittstelle automatisch, man muss seine URLs also nicht extra mit "htmlspecialchars" umwandeln.
Hier die Sitemap-Index Datei:
// -------------
// SITEMAP INDEX
// -------------
$dom = new DOMDocument('1.0','UTF-8');
$dom->formatOutput = true;
$xml = $dom->appendChild($dom->createElement('sitemapindex'));
$xml_attr = $xml->setAttribute("xmlns","http://www.sitemaps.org/schemas/sitemap/0.9");
$sitemap = $xml->appendChild($dom->createElement('sitemap'));
$loc = $sitemap->appendChild($dom->createElement('loc'));
$loc->appendChild($dom->createTextNode("http://www.example.com/sitemap1.xml.gz"));
$lastmod = $sitemap->appendChild($dom->createElement('lastmod'));
$lastmod->appendChild($dom->createTextNode(date(DATE_W3C)));
// SAVE
if ($dom->save("/htdocs/sitemap-index.xml")) {
echo "Sitemap-Index erfolgreich gespeichert\n";
} else {
echo "Fehler beim Speichern des Sitemap-Index!\n";
exit;
}
// -------
// SITEMAP
// -------
$dom = new DOMDocument('1.0','UTF-8');
$dom->formatOutput = true;
$xml = $dom->appendChild($dom->createElement('urlset'));
$xml_attr = $xml->setAttribute("xmlns","http://www.sitemaps.org/schemas/sitemap/0.9");
// BEISPIEL ERSTE URL (dass muss später dann in eine Schleife)
$url = $xml->appendChild($dom->createElement('url'));
$loc = $url->appendChild($dom->createElement('loc'));
$loc->appendChild($dom->createTextNode("http://www.example.com/index.php?mod=help&idx=1"));
// OPTIONAL
$lastmod = $url->appendChild($dom->createElement('lastmod'));
$lastmod->appendChild($dom->createTextNode(date(DATE_W3C)));
$changefreq = $url->appendChild($dom->createElement('changefreq'));
$changefreq->appendChild($dom->createTextNode("daily"));
$priority = $url->appendChild($dom->createElement('priority'));
$priority->appendChild($dom->createTextNode("0.8"));
// BEISPIEL ZWEITE URL ETC..
$url = $xml->appendChild($dom->createElement('url'));
$loc = $url->appendChild($dom->createElement('loc'));
$loc->appendChild($dom->createTextNode("http://www.example.com/index.php?mod=help&idx=2"));
$lastmod = $url->appendChild($dom->createElement('lastmod'));
$lastmod->appendChild($dom->createTextNode(date(DATE_W3C)));
$changefreq = $url->appendChild($dom->createElement('changefreq'));
$changefreq->appendChild($dom->createTextNode("daily"));
$priority = $url->appendChild($dom->createElement('priority'));
$priority->appendChild($dom->createTextNode("0.8"));
// SAVE
if ($dom->save("/htdocs/sitemap.xml")) {
echo "Sitemap erfolgreich gespeichert\n";
} else {
echo "Fehler beim Speichern der Sitemap!\n";
exit;
}
Ergebnis "sitemap-index.xml":
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>http://www.example.com/sitemap1.xml.gz</loc>
<lastmod>2008-11-06T12:39:03+01:00</lastmod>
</sitemap>
</sitemapindex>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/index.php?mod=help&idx=1</loc>
<lastmod>2008-11-06T12:39:03+01:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>http://www.example.com/index.php?mod=help&idx=2</loc>
<lastmod>2008-11-06T12:39:03+01:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
</urlset>
Weitere Informationen über Google-Sitemaps und genaue Feldbeschreibungen findet Ihr unter:
http://www.sitemaps.org/de/protocol.php
https://www.google.com/webmasters/tools/docs/de/protocol.html
Google-Sitemaps validieren bzw. überprüfen:
http://www.validome.org/google/lang/ge
Viel Spaß noch
Gruß
Frank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 101181
Url: https://administrator.de/contentid/101181
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
4 Kommentare
Neuester Kommentar
Wir haben diesen Bericht zum Anlass genommen, in unserer Open Source CMS Software Contrexx eine Sitemaps-XML Datei automatisch zu generieren. Ab der aktuellen Download Version ist dies nun enthalten.
Weitere Informationen unter http://www.contrexx.com/de/
Weitere Informationen unter http://www.contrexx.com/de/