Manchmal werden in einer generierten Joomla Sitemap Links wie zb.
http://www.meineSeite/component/content/article/news/mein-artikel.html
angezeigt. Der Link müsste aber eigentlich
http://www.meineSeite/news/mein-artikel.html
lauten. Dies kann vor allem dann passieren, wenn suchmaschinenoptimierte Links mit Joomla verwendet werden. Am Beispiel der weitverbreiteten und kostenlosen Komponente Xmap soll hier gezeigt werden, wie man solche Probleme lösen kann.
Fehlerhafte Joomla Sitemap!
Für jeden Webseitenbetreiber macht eine Sitemap auf jeden Fall Sinn. Wer Joomla verwendet, hat für diesen Zweck die Auswahl zwischen mehreren Komponenten. Unter Umständen erzeugen diese Komponenten jedoch fehlerhafte bzw. falsche Links, wie bereits oben beschrieben.
Bei Xmap kann eine XML-Datei und eine HTML-Datei mit Links erzeugt werden. Erstere kann dann zb. bequem bei Google oder einem anderen Suchmaschinen-Anbieter eingereicht werden.
Dazu wird einfach der Link zur Sitemap zb. in den Webmaster-Tools von Google angegeben. Es ist dann kein weiterer Aufwand nötig und Google liest eine stets aktuelle Liste der Links aus.
Die HTML-Variante welche direkt auf der Joomla-Seite dargestellt wird, macht eher Sinn bei sehr umfangreichen Projekten und ist somit nicht zwingend für jeden Webmaster notwendig. Fehler können natürlich auch hier auftreten.
Die Sitemap zeigt also Links an welche durchaus funktionieren, aber von den suchmaschinenoptimierten Links abweichen. Suchmaschinen erkennen dadurch doppelten Content.
Der hier beschriebene Fehler tritt wahrscheinlich bei nahezu allen Sitemap-Komponenten auf, nicht nur bei Xmap. Es handelt sich hier eher um ein Joomla-Problem, welches allerdings nicht in jeder Konstellation auftritt.
Die folgenden Erläuterungen beziehen sich auf Joomla 2.5.x. und sind wahrscheinlich auch noch für Versionen nach 3.x relevant.
Gehen wir einmal davon aus, dass im Backend unter Site -> Konfiguration im ersten Tab "Site" auf der rechten Seite bei "Suchmaschinenoptimierung (SEO) bis auf Unicode Aliase alles auf "Ja" gesetzt wurde, wie hier im Bild zu sehen.
Natürlich muss noch im Hauptverzeichnis der Seite die Datei htaccess.txt nach .htaccess umbenannt worden sein.
Joomla generiert jetzt also suchmaschinenfreundliche URL´s.
Im Backend unter Menüs ist auf jeden Fall eine Startseite gesetzt.
Zum Beispiel in einem Menü mit der Bezeichnung "Main Menu" oder "Top Menü".
Gehen wir weiter davon aus, dass es sich um den Menütyp "Beiträge >> Hauptbeiträge" handelt.
Diesem Menütyp wurden zb. eine Hauptkategorie mit der Bezeichnung "News" und weitere Unterkategorien zugewiesen.
Diese Kategorien sind natürlich schon vorher unter Inhalt -> Kategorien erstellt worden.
Die einzelnen bereits geschriebenen Artikel wurden als Haupteintrag definiert, ansonsten würden sie ja nicht von dem Menütyp "Beiträge >> Hauptbeiträge" berücksichtigt und auf der Frontpage angezeigt werden.
Wer also diese oder eine ähnliche Konstellation hat, könnte das Problem mit fehlerhaft generierten Links in der Sitemap haben. Der Fehler wird jedoch keinesfalls bei allen Joomla-Anwendern auftreten.
Leider war bis zum Schreiben dieses Artikels nirendwo im Internet eine gute Lösung zu finden. Selbst im Forum des Xmap-Entwicklers wurde das Ärgernis zwar angesprochen, aber keine Lösung angeboten.
Die Lösung!
Der Sitemap-Komponente muss jetzt irgendwie beigebracht werden, wie die Links richtig auszusehen haben. Dazu muss leider etwas in den Code der Erweiterung eingegriffen werden.
Damit das gleich von Anfang an Hand und Fuss hat, kann man hierfür die Override-Technik nutzen. Dadurch bleiben dann alle gemachten Änderungen auch nach einem Update immer erhalten.
Die benötigten Dateien der Extension Xmap sind in folgendem Verzeichnis zu finden:
/components/com_xmap/views/xml
und
/components/com_xmap/views/html
In beiden Ordnern ist jeweils ein Verzeichnis "tmpl" zu finden, worin sich jeweils die Datei "default_class.php" befindet.
Jetzt wird ein Override gemacht. Dazu wird im Verzeichnis des verwendeten Templates ein HTML-Ordner erstellt, falls er nicht schon vorhanden ist. Der Pfad müsste dann so lauten:
/templates/name_des_templates/html
In diesen Ordner muss unbedingt eine leere HTML-Datei mit der Bezeichnung index.html kopiert werden bzw. eine erstellt werden. Dies verhindert den direkten Aufruf eines Ordners von außerhalb. Für alle weiteren Ordner welche jetzt noch erstellt werden müssen, gilt das Gleiche.
In den Ordner "html" kommt jetzt noch ein weiterer Ordner mit der Bezeichnung "com_xmap". Neben der leeren index.html werden darin jetzt die Ordner "html" und "xml" erzeugt.
Jetzt können diese Ordner mit den oben genannten originalen Dateien aus den jeweils richtigen Verzeichnissen der Komponente befüllt werden. Für die XML-Ausgabe würde der Pfad jetzt so lauten:
/templates/name_des_templates/html/com_xmap/xml/default_class.php
Für die HTML-Ausgabe würde der Pfad logischerweise so lauten:
/templates/name_des_templates/html/com_xmap/html/default_class.php
Nun können diese Dateien nach Wunsch bearbeitet werden und bleiben auch nach einem Update von Xmap unangetastet.
Mit einem Editor wie zb. Notepad++ wird jeweils die Datei default_class.php geöffnet. Bei der Datei im XML-Ordner befindet sich ca. ab Zeile 102 folgender Eintrag:
Dies ist nur ein Auszug. Die beiden Zeilen sind noch länger. Direkt darunter kann jetzt folgende selbst geschriebene Zeile eingefügt werden:
Darauf folgt die Ausgabe der generierten Links mit Echo, welche jetzt fehlerfrei sein sollten.
Der selbst geschriebene PHP-Code enfernt also einfach component/content/article/ und die Links in der Sitemap sind ab sofort korrekt.
Für die selbe Datei aus dem Ordner "html" gilt die gleiche Vorgehensweise. Allerdings ist diese Datei nicht mit dem gleichen Code gefüllt und die eigene Replace-Anweisung kann nicht an die gleiche Stelle eingefügt werden.
Hier ist ab ca. Zeile 77 folgendes zu finden:
Direkt hierunter wird also wieder der eigene Code eingetragen. Jetzt sind auch die Links auf der HTML-Seite in der Joomla-Frontpage in Ordnung, sofern man sie überhaupt verwendet.
Sicher gäbe es noch diverse andere, aber wahrscheinlich kompliziertere Ansätze. Die hier beschriebene Vorgehensweise stellt jedoch eine schnell zu machende, effiziente und vor Updates sichere Lösung dar. Das Prinzip dieser Lösung kann natürlich auch für andere Sitemap-Erweiterungen angewendet werden.