Sitemaps-Protokoll für Suchmaschinen automatisch erstellen (Tutorial)
Sorgen Sie dafür, dass die Nutzer auf einen größeren Teil Ihrer Website aufmerksam werden mit einem „Sitemaps-Protokoll”.
![[Bildschirmfoto]
Sitemaps-Protokoll für Suchmaschinen automatisch erstellen (Tutorial) [Bildschirmfoto]
Sitemaps-Protokoll für Suchmaschinen automatisch erstellen (Tutorial)](img/sitemap_protokoll.png)
Ein „Sitemaps-Protokoll” stellt eine einfache Möglichkeit für Webmaster dar, Suchmaschinen Seiten auf Ihrer Website zu melden, die zum durchsuchen verfügbar sind. Dieses „Sitemaps-Protokoll” wird von Google, Yahoo und Microsoft (Bing) und vielen anderen Suchmaschinen unterstützt.
Ein einfaches Beispiel wie so ein „Sitemaps-Protokoll” aussehen sollte. Hierbei handelt es sich um eine XML-Datei die mit jedem Texteditor erstellt werden kann.
Die Kopfdaten des XML-Codes sind immer gleich, nur die absolute Adresse zur Website müssen Sie anpassen:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
</url>
Eine einzelne Seite tragen Sie wie folgt ein:
<url>
<loc>http://www.example.com/verzeichnis/demoseite.htm</loc>
<lastmod>2023-09-29</lastmod>
</url>
Zwischen dem XML-Tag <loc>
muss die
absolute Adresse zur Datei auf der Website stehen.
Und zwischen <lastmod>
das Datum der letzten Aktualisierung der Datei
(das Format des Datums bitte beachten [Jahr-Monat-Tag]).
Zum Abschluss schließen Sie den XML-Code mit:
</urlset>
Das erstellte „Sitemaps-Protokoll” muss im Hauptverzeichnis der Website als
sitemap.xml
gespeichert werden.
Sitemaps-Protokoll Generator
✔ Da es doch recht mühsam ist für jede Datei auf der Website, einen Eintrag per Hand vorzunehmen, ist eine Lösung mit PHP dafür besser geeignet.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<!DOCTYPE html>
<html>
<head>
<title>Sitemaps-Protokoll Generator</title>
</head>
<body>
<h2>Sitemaps-Protokoll Generator</h2>
<?php
/*
Sitemaps-Protokoll Generator
- https://werner-zenk.de - 16.03.2023
*/
/* URL (Homepage-Adresse) */
$url = "http://www.example.com";
/* Die zu durchsuchenden Verzeichnisse eintragen.
Aktuelles Verzeichnis durchsuchen mit "./" */
$verzeichnisse = array(
"verzeichnis1/",
"verzeichnis2/",
"verzeichnis3/",
);
/* Die Dateitypen der Dateien die aufgeführt werden */
$dateiendungen = array(
".htm",
".html",
".php",
);
/* Vorzeichen bei Dateien die nicht aufgeführt werden
sollen zum Beispiel: _intern.htm, _log.php */
$vorzeichen = "_";
/* Einzelne Dateien die nicht aufgeführt werden sollen */
$nicht_durchsuchen = array(
"index.php",
"login.htm",
);
// XML-Code - Kopfdaten
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$xml .= "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n<url>\n<loc>" .
$url . "/</loc>\n</url>\n";
$sitemap = "sitemap.xml"; // Name der XML-Datei
$eintraege = 0;
// Verzeichnisse durchsuchen
foreach ($verzeichnisse as $verzeichnis) {
foreach ($dateiendungen as $dateiendung) {
foreach (glob($verzeichnis . "*" . $dateiendung) as $datei) {
$dateiname = basename($datei);
// Vorzeichen und einzelne Dateien ausschließen
if ($dateiname[0] != $vorzeichen && !in_array($dateiname, $nicht_durchsuchen)) {
// Eintrag (XML-Code) hinzufügen
$xml .= "<url>\n<loc>" . $url . "/" . $datei . "</loc>\n<lastmod>" .
date("Y-m-d", filemtime($datei)) . "</lastmod>\n</url>\n";
$eintraege++;
}
}
}
}
// XML-Code schließen
$xml .= "</urlset>";
if ($eintraege == 0) {
echo "<p>Es wurden keine Einträge gefunden!</p>";
}
else {
// XML-Datei vorhanden?
if (file_exists($sitemap)) {
// Alte XML-Datei löschen
if (unlink($sitemap)) {
echo "<p>Datei '" . $sitemap . "' wurde gelöscht.</p>";
}
else {
echo "<p>Fehler beim löschen der Datei '" . $sitemap . "'!</p>";
exit;
}
}
// XML-Datei speichern
if (file_put_contents($sitemap, $xml) == true) {
echo "<p>Datei <a href='" . $sitemap . "' target='_blank'>" . $sitemap . "</a> wurde mit " .
$eintraege . " Einträgen gespeichert.</p>";
}
else {
echo "<p>Fehler beim erstellen der Datei '" . $sitemap . "'!</p>";
}
}
?>
</body>
</html>
Anleitung
- Den Sitemaps-Protokoll Generator kopieren die Parameter an Ihre
Website anpassen und speichern (z.B. als:
sitemap_generator.php
). - Laden Sie die Datei auf Ihrer Webseite in das Hauptverzeichnis hoch und rufen Sie über die Adresszeile Ihres Browsers die Datei auf.
Tipp: Kontrollieren Sie die erstellte XML-Datei,
geben Sie dazu im Mozilla Firefox-Browser (oder dem Internet-Explorer) den Pfad zur XML-Datei in die
Adresszeile ein.
So ähnlich sollte der XML-Code dann angezeigt werden:


Sie können zum anzeigen aber auch einen normalen Texteditor verwenden.
Überprüfen Sie nun, ob die Pfade zu den Dateien korrekt eingetragen sind. Gegebenenfalls müssen Sie
den Generator anpassen und erneut starten.
» Sitemaps-Protokoll dieser Website anzeigen
Hinweis
Damit das „Sitemaps-Protokoll” überhaupt von den Suchmaschinen gefunden wird muss ins Hauptverzeichnis
Ihrer Website eine robots.txt
-Datei mit folgendem Inhalt:
Sitemap: http://www.example.com/sitemap.xml
Also der absolute Pfad zu der Datei sitemap.xml
auf Ihrer Website.
Links
Mehr über das „Sitemaps-Protokoll” finden Sie auf:
sitemaps.org/de/protocol.php
wikipedia.org/wiki/Sitemaps-Protokoll
Tipps
- Mit dem PHPMailer E-Mails sicher versenden
- Damit E-Mails sicher beim Empfänger ankommen und nicht irgendwo anders landen (Spamordner) oder sogar vom Provider abgelehnt werden nutzt man am besten eine fertige Mailer-Klasse wie den „PHPMailer”.
- Mit PHP schreiben und lesen
- Hier möchte ich an Beispielen zeigen, wie eine .txt-Datei mit PHP erstellt wird und wie diese ausgelesen werden kann.
- Download-Archiv
- Mit dem Download-Archiv können Sie Bilder, PDF-Dateien, ZIP-Archive und so weiter auf dem Server hochladen. Die Datei-Infos (Dateiname, Beschreibung, Dateigröße und das Datum) werden in einer SQLite-Datenbank gespeichert.
- Erster Eintrag in eine MySQL-Datenbank mit PHP
- Eine Anleitung wie man ein Nachrichten-System mit einer MySQL (oder MariaDB)-Datenbank über PHP realisieren kann. Komplett mit Formularen zum eintragen, anzeigen und bearbeiten der Daten.
Abonniere meinen RSS-Feed
um über aktuelle Seiten benachrichtigt zu werden.
Dynamische Seiten Affenformular Zoom-Funktion Audiodatei Passwortschutz Zugriffsrechte Responsiv Webseitenschutz Inhaltsverzeichnis Sortierung localStorage Marquee Quelltext Blätterfunktion Zoom Funktion Linkliste Datenschutz-Hinweis Seitenformatierung Absolute URL Zeichnen Farbschema Wasserzeichen Zebra-Tabelle Keyframes Formular befüllen
Sitemaps-Protokoll Generator (rekursiv)
Das Skript sucht rekursiv in mehreren getrennten Verzeichnissen.
👍 Vielen Dank an Detlef Paschke (http://helpdesk.schabau.eu/) für die Anpassung des Scripts.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<!DOCTYPE html>
<html lang="de">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0">
<title>Sitemaps-Protokoll Generator (rekursiv)</title>
<meta content="Sitemap-Generator" name="description">
<meta name="robots" content="noindex,nofollow">
</head>
<body>
<h1>Sitemaps-Protokoll Generator (rekursiv)</h1>
<?php
/* URL der Webseite (Homepage-Adresse ohne "/" am Ende.) */
$url = "http://www.example.com";
/* Die zu durchsuchenden Verzeichnisse eintragen.
Aktuelles Verzeichnis durchsuchen mit "./" und Root-Verzeichnis,
wenn das Script in einem Unterverzeichnis liegt, mit ../ durchsuchen.
Verzeichnisse werden rekursiv (inkl. Unterverzeichnis) durchsucht. */
$verzeichnisse = array(
"../",
//"../mail",
);
/* Verzeichnisse, die von der rekursiven Suche ausgeschlossen werden sollen. */
$nicht_durchsuchen = array(
//"../certs",
//"../certs_dehydrated",
);
/* Dateitypen die in die Sitemap-Datei aufgenommen werden sollen. */
$dateiendungen = array(
"htm",
"html",
"php",
//"xml",
);
/* Vorzeichen von Dateien, die nicht in die Sitemap-Datei aufgenommen werden sollen.
z.B. _intern.htm oder .login.php */
$vorzeichen = array(
//".",
//"_",
);
/* Einzelne Dateien die nicht in die Sitemap-Datei aufgenommen werden sollen */
$ausschluss = array(
"google00aa00cc00aa00cc.html",
//"login.php",
);
/* Dateiname und Pfad der Sitemap-Datei.
Die Sitemap-Datei wird im Webroot-Verzeichnis gesucht. Wird nur der Name angegeben,
speichert das Script die Sitemap-Datei in dem Verzeichnis, in dem es liegt. */
$sitemap = "./sitemap.xml";
/* ### Ende der Konfiguration ###
Kopfdaten der Sitemap-XML-Datei erstellen. */
$xml = "<?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\">
<url>
<loc>" . $url . "/</loc>
</url>\n";
$eintraege = 0;
// Verzeichnisse durchsuchen
class dirfilter extends RecursiveFilterIterator
{
public function accept()
{
global $nicht_durchsuchen;
foreach ($nicht_durchsuchen as $exPath) {
if (strpos($this->current()->getPath(), $exPath) !== false) {
return false;
}
}
return true;
}
}
foreach ($verzeichnisse as $verzeichnis) {
$dirIterator = new RecursiveDirectoryIterator($verzeichnis, FilesystemIterator::FOLLOW_SYMLINKS);
$filter = new dirfilter($dirIterator);
$fileinfos = new RecursiveIteratorIterator($filter);
// Nach Ausschlüssen filtern.
foreach ($fileinfos as $pathname => $fileinfo) {
if (in_array($fileinfo->getExtension(), $dateiendungen) &&
str_replace($vorzeichen,'', substr($fileinfo->getFilename(), 0, 1)) &&
!in_array($fileinfo->getFilename(), $ausschluss) &&
// Dateien mit dem META-Tag 'noindex' werden nicht aufgenommen.
!preg_grep('/noindex/', get_meta_tags($fileinfo))
) {
$datei = str_replace(['../', './'],'', $fileinfo->getPathname());
// Datei in Sitemap-Datei hinzufügen.
$xml .= "<url>\n<loc>" . $url . "/" . $datei . "</loc>\n<lastmod>" .
date("Y-m-d\TH:i:sP", $fileinfo->getCTime()) . "</lastmod>\n</url>\n";
$eintraege++;
$links[] = $url . "/" . $datei;
}
}
}
// Sitemap-Datei schließen.
$xml .= "</urlset>";
if ($eintraege == 0) {
echo "<p>Es wurden keine Einträge gefunden!</p>";
}
else {
// Alte Sitemap-Datei löschen wenn vorhanden.
if (file_exists($sitemap)) {
if (unlink($sitemap)) {
echo "<p>Die vorhandene Sitemap-Datei '" . $sitemap . "' wurde gelöscht.</p>";
}
else {
echo "<p>Fehler beim löschen der Datei '" . $sitemap . "'!</p>";
exit;
}
}
// Neue Sitemap-Datei speichern.
if (file_put_contents($sitemap, $xml) == true) {
echo "<p>Eine neue Datei <a href='" . $sitemap . "' target='_blank'>" . $sitemap . "</a> wurde mit diesen " .
$eintraege . " Einträgen erstellt:</p>";
foreach ($links as $link) {
echo $link . "<br>";
}
}
else {
echo "<p>Fehler beim erstellen der Datei '" . $sitemap . "'!</p>";
}
}
?>
</body>
</html>