Leider hat sich hier der Tonfall teilweise etwas stärker als dem Thema guttut (ACHTUNG: das ist meine persönliche Meinung!) von einer sachlichen Diskussion in den Austausch persönliche Ansichten entwickelt.
Ich versuche darum das Thema mal wieder etwas auf den Boden der Tatsachen zurückzuholen:
Das Entwicklerteam auf phpBB.com sträubt sich grundsätzlich nicht gegen einen Einbau
semantischer URL in das pphBB-Kernsystem, ist aber aufgrund fehlender Kapazitäten aktuell nicht in der Lage, so etwas selber einzubauen und zu pflegen. außerdem fehlen genaue Spezifikationen, was wie umgesetzt werden soll. Dazu gibt es etliche Topics auf pphBB.com und area51.
Mal aus Sicht eines Programmieres
URLs mit semantischen Texten sind grundsätzlich gar nicht schwer, solange die dahinterliegenden Inhalte statistisch sind.
Ein BLOG-Post in einem (Wordpress- oder was auch immer)-BLOG existiert immer als "unteilbares Ganzes" - einmal angelegt, ist er da oder nicht mehr da (wenn er gelöscht wurde). Diese Systeme wurden in der Regel auch schon so entworfen, dass eine entsprechende URI-Struktur vom Betreiber wählbar ist. Dazu gibt es ein zentrales Modul (bei wordpress z.B. index.php), über das ALLE Anfragen an die Seite geleitet werden. Dazu muss der Server entsprechend konfiguriert werden. Dies geschieht z.B. über eine
.htaccess
(für Apache), die alle Anfragen, die nicht an index.php gehen, an index.php umleitet.
Jeder Eintrag, sei es ein Artikel oder eine statische Seite, hat eine eindeutige ID in der Datenbank.
Innerhalb der Anwendung "wordpress" wird dann die URI ausgewertet und der entsprechende zugehörige eindeutige Eintrag zu Ansicht generiert.
Simpel, oder?
Theoretisch ist das bei Foren auch möglich. Für phpBB gibt es seit 3.1 mit dem zentralen Modul
app.php
schon etwas adäquates - jede URI, zu der Datei und / oder Verzeichnis nicht im Root des Bords gefunden werden, wird an die
app.php
geleitet. Diese sorgt als "Wrapper" dafür, dass die URI an eine Extension geleitet wird, die sich dafür zuständig erklärt. So werden z.B. auch die Seiten der "Pages"-Erweiterung adressiert. So weit, so gut, die technischen Voraussetzungen sind also quasi da (als Grundgerüst, aber immerhin).
Aber: wie baue ich jetzt automatisch meine semantischen URI?
Ich versuche mal ein paar "Use-Cases" zu beschreiben:
Für einen Topic könnte man eine semantische URI aus dem Topic-Titel bauen, also
www.example.com/mein-toller-topic
, wenn jemand anders auf die Idee kommt einen Topic mit gleichem Namen zu erstellen, bekommt der eben (so macht Wordpress das bei doppelten Titeln auch) einen Nummer hintendran, also
www.example.com/mein-toller-topic-1
. Super, damit kann ich alle Topics des Bords eindeutig adressieren.
Ein Foren-Topic ist aber kein "monolitischer" Block wie ein BLOG-Beitrag, sondern besteht aus einzelnen Posts, die ich auch eigenständig anspringen kann (z.B. bei "erster ungelesener Beitrag"). Wie adressiere ich eine Post in einem Topic? Leider heißen alle Posts in einem Topic in der Regel gleich, nämlich: "Re: Mein toller Topic" - also fällt das Adressieren über den Topic-Titel schon mal weg (außer man nummeriert die Post-Titel auch durch, also z.B.
www.example.com/mein-toller-topic-1
) - aber halt, dann gerate ich ggf. in Konflikt mit einem gleichnamigen Topic.
Also muss eine andere Lösung her (die evtl. sogar ohne eine "URI-DB" auskommen kann, wie das schon viele "SEO-Mods" und -Extensions gemacht haben):
Man packt in den Namen einfach die sowie so vorhandene eindeutige ID des Topic oder Post oder beides rein:
www.example.com/mein-toller-topic-t815
für Topic 815,
www.example.com/mein-toller-topic-t815-p4711
für Post 4711 in Topic 815.
Diese Adressen werden jetzt von den Suchmaschinen (SuMa) gefunden und von ihnen und von fleißigen Forenbesuchern als Links in alle Welt verteilt.
Eigentlich ganz einfach, oder
Jetzt kommen wir mal zu den schwierigeren Problemen (die Liste ist mit Sicherheit nicht vollständig!):
- Was passiert, wenn ein Moderator den Post in einen anderen Topic verschiebt? Der Post steht dann in einem neuen Topic und wird z.B. über
www.example.com/das-war-total-offtopic-t666-p4711
adressiert.
phpBB ist in der Lage sein, aus der Post-ID den korrekten Topic zu ermitteln, könnte also in diesem Fall den neuen Topic auch mit der alten URI www.example.com/mein-toller-topic-t815-p4711
ohne Probleme anzeigen - es wird einfach bei Links, die eine post-id enthalten, die ID des Topic ignoriert. Aber die SuMa hat in der Beschreibung doch etwas ganz anderes gezeigt -> verwirrter Forenbesucher. Also muss den Suchmachinen mitgeteilt werden, dass die alte Adresse nicht mehr gilt. Also wird die in der URI enthaltene topic-id mit der topic-id des aktuellen Topic verglichen. Wenn sie nicht übereinstimmt, wird ein http-Status "301 moved permanently" in den Header gesetzt. So weit, so einfach.
Jetzt ändert der Moderator (oder auch der Benutzer) den topic-Titel (Weil der Benutzer zum 365. Mal den Titel "Hilfe" gewählt hat.
Aus www.example.com/hilfe-t12345
(der bereits in etlichen Suchmaschineneinträgen und externen Links hinterlegt ist) wird dann www.example.com/mein-dackel-jagd-wieder-hinter-seinem-schwanz-her-t12345
- auch hier muss wieder ein http-Status "301 moved permanently" gesetzt werden.
- permanente Neuberechnung der eigentlich statischen URI. Bei jedem Aufruf, bei dem Links erstellt werden (und das sind in einer phpBB-Seite in der Regel eine ganze Menge) muss die URI neu berechnet, also aus Titel und ID neu zusammengesetzt werden.
Fazit: man speichert die URI doch besser in der DB ab. Aber wo? Bei jedem Element, das eine eigene URI hat? Also im Forum (für die Foren-URI), im
Topic (für die Topic-URI), im Post (für die Post-URI)? Dann werden wieder zusätzliche Funktionen beim jeweiligen Titel-Edit fällig
- Allgemeiner Konsens ist es wohl, das "Füllwörter" in Form von Artikeln und Konjunktionen nichts in URI zu suchen haben, also kein "der", "die", "das" "und", "oder" .... Da phpBB mehrsprachig ist, muss es für jede Bordsprache eine Liste dieser Wörter geben
- Damit sind wir beim nächsten Problem: Aus welcher Sprache sollen die URI-"Füllwörter" bei einem mehrsprachigen Bord verwendet werden? Aus der des Benutzers? Der des Gast-Accounts (als Default-Sprache)? Einstell- /Erweiterbar im ACP?
- Das Problem "Zeichensatz": URI sollten in der Regel nur aus lateinischen Zeichen (resp. ASCII-Kleinbuchstaben + ein paar Sonderzeichen) bestehen, außer sie richten sich ganz gezielt nur an das jeweilige "Sprachpublikum". Bei den Sprachen mit lateinischen Zeichensätzen sollten dann die diakritischen Zeichen (also die, wo irgendein Kringel drauf oder drunter ist, wie z.B. ä, ö, ü durch die entsprechenden Basiszeichen ersetzt werden
) - auch dies muss von dem jeweiligen Sprachpaket geleistet werden, sprich eine Umsetztabelle o.ä. mitliefern. Die URI sollten weiterhin lesbar bleiben, auch wenn ein paar Kringel fehlen.
Verlassen wir aber den Raum der lateinischen Zeichensätze, wird es schwieriger, wenn die URI zu Inhalt passen soll. IDN? Und dann alles gleich als IDN? Auch für die lateinischen Sprachen?
- ...
Da gibt es mit Sicherheit noch mehr - und auch etliche weitere Use-Cases (sollen z.B. für MCP und UCP auch semantische URL verwendet werden? Was ist mit URI, die jetzt schon über
app.php
verwaltet werden?)
Also, wenn noch weiterer
sachlicher Input da ist - her damit oder besser direkt in den entsprechenden Topic in
Ideas