Sitemap mit PHP erstellen aus Datenbank
Redaktionelle Einordnung
Diese archivierte Diskussion behandelt Sitemap mit PHP erstellen aus Datenbank aus Sicht der Rubrik PHP & MySQL.
Für Indexierungsfragen sind heute Search Console, saubere Robots-Signale, Canonicals und XML-Sitemaps die wichtigsten Stellschrauben.
Sinnvoll nutzbar bleibt der Thread vor allem als historischer Kontext, für typische Fragestellungen und zur Einordnung älterer Empfehlungen.
Einige im historischen Thread genannte Tools, Dienste oder externe Links könnten heute nicht mehr verfügbar oder inhaltlich überholt sein. Nutzen Sie sie bitte nur mit zusätzlicher Prüfung.
Startbeitrag
Originaler Foreninhalt in modernisierter Darstellung.
Hallo
Was muss ich alles beachten wenn ich aus einer Datenbank eine Sitemap automatisch erstellen möchte?
Gzip Komprimierung und Header der die Datei als application/xml ausweist sende ich schon mit!
xml als Endung funktioniert bei mir nicht ! Gibt es noch andere Möglichkeiten als eine php Endung?
Gibt es sonst noch was zu beachten?
Jetzt kümmere ich mich erst mal noch darum das ich Lastmod in der Sitemap noch angebe!
Gruß
Jörg
Antworten
10 Beiträgejoerg schrieb:
xml als Endung funktioniert bei mir nicht ! Gibt es noch andere Möglichkeiten als eine php Endung?
Warum sollte .xml nicht funktionieren?
Entweder jagst du deine .xml-Datei mit dem PHP-Code drin durch den PHP-Interpreter, oder zu machst ein URL-Rewriting. Beides ist über .htaccess zu lösen.
In beiden Fällen kannst du die "xml" als Endung haben.
XML-Datei mit PHP parsen:
[html]<FilesMatch "^sitemap.xml$">
SetHandler application/x-httpd-php
</FilesMatch>[/html]
Einfach deine .php-Datei in sitemap.xml umbenennen.
URL-Rewriting:
[html]RewriteEngine on
RewriteRule ^(.*)sitemap.xml$ $1sitemap.php[/html]
Hallo Florian
Danke für die Information!
Das bedeutet dann wohl bei mehreren Dateien das ich jede in der htaccess namentlich angeben muss!
Kann es sein das die geschicktere Möglichkeit ist die xml Datei mit PHP zu parsen?
Was passiert eigentlich wenn ich eine xml Datei mit PHP parse die normal erstellt wurde?
Gruß
Jörg
joerg schrieb:
Kann es sein das die geschicktere Möglichkeit ist die xml Datei mit PHP zu parsen?
Ich mache es so, aber ob es die geschicktere ist, kann ich nicht sagen.
joerg schrieb:
Was passiert eigentlich wenn ich eine xml Datei mit PHP parse die normal erstellt wurde?
Falls du die shorttags aktiviert hast, bekommst du \'nen Parse Error wegen dem <?xml .. ?>
Raptor schrieb:
Falls du die shorttags aktiviert hast, bekommst du \'nen Parse Error wegen dem <?xml .. ?>
Deshalb sollte man das auch lassen (die shorttags zu aktivieren und zu schreiben).
Gérard
Hallo
Der Weg der bei mir nun funktioniert sieht so aus!
[html]
<Files sitemap.xml>
SetHandler x-httpd-php5
</Files>
[/html]
Gruß
Jörg
Der Vollständigkeit halber: Eine Alternative gibt es noch, man ruft für alle nicht existierenden Dateien eine PHP-Datei auf und übergibt den Namen der Datei als QueryString an die PHP-Datei.
In der PHP-Datei kann man dann anhand des QueryStrings entscheiden, ob man eine Fehlerseite zurückgibt oder z.B. eine XML-Datei erzeugt. Die dazugehörige htaccess sieht so aus:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Das ganze macht aber IMHO erst dann Sinn, wenn man mehr als nur ein paar XML-Dateien dynamisch erzeugen will.
Hallo
So als kleine Bemerkung zum Abschluß. Ich habe jetzt mehrer Abfragen aus der Datenbank gemacht und die als php Dateien abgespeichert!
Dann habe ich daraus einen Sitemap Index erstellt und den in den GWT angemeldet.
Von den 27 einzelnen Sitemaps sind keine Stunde später 9 mit der Anzhal der indexierten Seiten angegeben!
3 von den Sitemaps haben mehr als 100 Einträge davon ist eine mit mehr als 600 auch überprüft worden!.
Gruß
Jörg
Hallo Jörg
Behandle die xml Datei genau wie eine normale Textdatei oder jede andere x-beliebige Datei.
Mit PHP kannst du Dateien anlegen, öffnen, beschreiben und schließen (speichern).
In einem früheren Thema habe ich da doch jemand geholfen und eine fast fertige Lösung vorgestellt - finde das nur leider nicht mehr, da ich in "Forum->eigene Themen" nicht blättern kann - what ever
Am besten beginnst du so:
$varSitemap = \'<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="gss.xsl"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
\';
Danach ließt du deine Datenbank aus.. und setzt am besten in einer WHILE folgendes ein..
$varSitemap .= \'<loc><url>
deine-seite.de/thema/\' . $row->id (oder Link) .\'.html
</url></loc>\';
ganz am Ende nach der Datenbankschleife der Abschluss:
$varSitemap .= \'</urlset>\';
wichtig ist der Punkt vor dem = einer Variable
jetzt hast du eine komplette Sitemap in der Variable $varSitemap
Diese tust du nur noch in einer Datei auf dem Server speichern und nennst diese "sitemap.xml"
Am besten legst du eine an und gibst dieser CHMOD 777 und mittels PHP tust du beim Sitemap erstellen einfach nur "Updaten"
Das mache ich auch nach aller paar Themen mit einem Klick und dann ist das okay
Weiß nicht was ihr mit der HTACCESS da machen wollt, aber die Sitemap kann im Header ganz einfach angegeben werden und gut - so schwer wirds ja wohl nicht sein
Ich helfe gern auch weiter, falls das alles etwas zu schnell war und gehe gern das bis zum fertigen Ergebnis mit DEINER Datenbankabfrage durch, bis bei dir das funktioniert.
Übrigens gibts bei mir im Forum auch paar Spezialisten falls du intensiv mit PHP zu tun hast www.webchars.de
Mfg, Marcus
Edit.. meine Sitemaps (alle) haben rund 28.000 Einträge,.. die Seiten gehen erst noch online..
Hallo Marcus
Ich bin ja schon fertig damit! Ich habe in dem Fall mein Wiki auf Basis Mediawiki abgefragt!
$suche[1] = \'&\';
$ersetzen[1] = \'%26\';
$suche[2] = \'ä\';
$ersetzen[2] = \'%C3%A4\';
$suche[3] = \'Ü\';
$ersetzen[3] = \'%C3%9C\';
$suche[4] = \'ü\';
$ersetzen[4] = \'%C3%BC\';
$suche[5] = \'ß\';
$ersetzen[5] = \'%C3%9F\';
$suche[6] = \'ö\';
$ersetzen[6] = \'%C3%B6\';
$suche[7] = \'é\';
$ersetzen[7] = \'%C3%A9\';
$suche[8] = \'Ä\';
$ersetzen[8] = \'%C3%84\';
$abfrage = "SELECT page_title , page_touched , page_namespace FROM prefix_page WHERE page_namespace =0 ORDER by page_title ASC";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo \'<url>\';
echo \'<loc>
$page = str_replace($suche, $ersetzen, $row->page_title);
echo $page;
echo \'</loc>\';
echo \'<lastmod>\';
echo substr($row->page_touched,0,4);
echo \'-\';
echo substr($row->page_touched,4,2);
echo \'-\';
echo substr($row->page_touched,6,2);
echo \'</lastmod>\';
echo \'<changefreq>monthly</changefreq>\';
echo \'<priority>0.5</priority>\';
echo \'</url>\';
}
Mit page_namespace =0 damit habe ich dann es auf die Artikel Seiten beschränkt!
Gruß
Jörg
Ah sehr schön
So geht das auch,.. ich nehme zum Umlaute decodieren html Codes, kein ASCII, aber denke das wird den Suchmaschinen sicher nicht jucken ..
Super! Und irgendwann baust du das sicher noch auf deine Menüs aus
Kannst ja mal den Post aktuell halten wieviel von wieviel Seiten dann im index sind laut WMP.. interessiert mich, denn bei mir hat es 4 Monate gedauert bis ein dreiviertel im Index waren - nun kommen bei mir noch rund 26.000 Links nochmal hinzu, mal schauen wie lang das dauert.
Mfg, Marcus