Eigene Sitemap für das WCF erstellen

  • WCF

Achtung: Diese Seite ist nur noch Teil eines Archivs und wird in Zukunft entfernt.

Zwar habe ich hier schon eine Sitemap vorgestellt, allerdings ist diese nicht für das WCF angepasst, da sie auch die Session an den Link anhängt. Stattdessen hat mich dieses Thema darauf gebracht, ein Tutorial zu schreiben, wie man seine eigene für das WCF optimierte Sitemap bekommt. Leider ist dieses nicht mehr verfügbar, so dass ich es nicht verlinken kann.

Eine Vorschau der fertigen Sitemap gibt es hier: kittblog.de/board/sitemap_posts.php
Diese wird problemlos von Google indexiert und ist damit wohl konform.

Dazu nutze ich diesen Code:

PHP-Quellcode

  1. <?php
  2. $map_item_limit = '1000'; // how much items should be on sitemap (not to much)
  3. require_once('./global.php');
  4. $sql = "SELECT n.postID, n.time
  5. FROM wbb".WCF_N."_1_post n
  6. ORDER BY time DESC LIMIT ".$map_item_limit;
  7. $result = WCF::getDB()->sendQuery($sql);
  8. $map_item = "";
  9. //get data
  10. while ($data = WCF::getDB()->fetchArray($result))
  11. {
  12. $map_postID = intval($data['postID']);
  13. $map_date = date('Y-m-d', $data['time']);
  14. $map_item .= '
  15. <url>
  16. <loc>'.PAGE_URL.'/index.php?page=Thread&amp;postID='.$map_postID.'</loc>
  17. <changefreq>always</changefreq>
  18. <lastmod>'.$map_date.'</lastmod>
  19. </url>';
  20. }
  21. header("Content-type: text/xml");
  22. echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
  23. <urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">
  24. $map_item
  25. </urlset>";
  26. ?>
Alles anzeigen
Das $map_item_limit in Zeile 2 gibt an, wie viele Einträge maximal vorkommen. Da diese immer wieder live aus der Datenbank geladen werden, sollte der Wert nicht zu hoch sein, da es sonst zu Komplikationen mit der Datenbank kommen kann.
Der SQL-Befehl, der die Daten holt, ist dann von Zeile 7-9. Hier suche ich mir die postID, also die ID der Beiträge und deren Zeitpunkt aus der Tabelle wbbX_1_post, wobei X für die Installationsnummer des WCF steht. Angeordnet wird es dann absteigend nach dem Erstellungsdatum, jedoch eben nur bis zum oben definierten $map_item_limit.
In Zeile 10 wird diese Abfrage dann abgesendet und in Zeile 11 sichergestellt, dass die Variable $map_item leer ist.

In Zeile 15 erhält man dann die Daten wieder zurück, da es dabei mehrere sind, werden diese in eine Schleife gesteckt, bis alle Daten ausgelesen wurden, eben bis zum $map_item_limit. Die postID wird dann ebenso wie das Datum aufbereitet, letzteres noch formatiert.
Dann wird in Zeile 21 die Variable, die in Zeile 11 geleert wurde, neu mit Daten gefüllt. Größtenteils mit Formatierungscode für die XML, aber eben auch mit der URL zum Beitrag selbst (Zeile 23). Dabei wird die URL, wie sie im ACP angegeben wurde, angezeigt, dann der statische Teil des Codes, der immer gleich bleibt und dann die postID, die aus der Datenbank ausgelesen und aufbereitet wurde.
In Zeile 25 wird dann das formatierte Datum angegeben, was für Suchmaschinen durchaus nützlich ist.

Ab Zeile 28 wird dann erst das Dokument selbst gefüllt, erst ein paar Daten, um welche Version es sich handelt und überhaupt, um was für einen Dateityp, bevor dann in Zeile 31 die nun gefüllte Variable $map_item eingelesen wird.

Diese Sitemap ist beliebig änderbar, um z.B. alle Forenbereiche auszulesen, muss man alle postID-Angaben in boardID ändern, die Zieltabelle in Zeile 8 ändern sowie den statischen Link in Zeile 23 und schon kann man sich alle Forenbereiche auslesen lassen. Das sieht dann so aus: kittblog.de/board/sitemap_boards.php
Die Zeitangabe ist hierbei nicht so wichtig und kann auch weggelassen werden, sie gibt das Erstellungsdatum der Kategorie an. Verwendet man externe Links als Kategorien, sollte man von dieser Sitemap absehen, da Google z.B. dann meckert.

Ich selbst habe es für meine Nachrichten, Rezensionen, Produkte, Tags und Artikel erfolgreich umgesetzt und finde schon, dass es sehr hilft.
Wenn weitere Fragen vorhanden sind, stehe ich gerne zur Verfügung. Ich sehe aber davon ab, Kompletterklärungen zu geben. Man muss auch selbst etwas nachdenken, so schwer ist eine Änderung nicht. ;)
Über den Autor
Ich bin Webentwickler in Stuttgart und administriere Server seit vielen Jahren. In diesem Blog erstelle ich hauptsächlich Tutorials für andere Webentwickler, Webdesigner und Serveradministratoren.
-------------------------------------------------------------------------------------------------------------------------------------
I’m a web developer in Stuttgart, Germany, and server administrator since many years. This blog mainly contains a tutorial set for other web developer, web designer and server administrators.

1.666 mal gelesen

Kommentare 5

  • Black Rider -

    Das stimmt, dennoch ist sie nach wie vor nutzbar. ;)

  • axi92 -

    Die Vorschau ist leider nicht mehr verfügbar

  • Trap -

    Kein Problem. Nettes Tutorial übrigens. :) Schade, dass es diesbezüglich (noch) keine offizielle Lösung von WoltLab gibt. Sitemaps erachte ich schon als relativ wichtig.

  • Black Rider -

    Da hast du natürlich Recht, habe da etwas vermischt. Ist nun aber ausgebessert, danke für den Hinweis ;)

  • Trap -

    "'.PAGE_URL.'/index.php?page=Board&amp;boardID='.$map_postID.'"
    Huch? Wieso auf einmal "page=Board&boardID", wenns doch eigentlich um die Themen geht? ;)
    Mit den postIDs wird man wohl nur wenige Foren aufrufen können. :D