mod_rewrite, SEO-friendly URLs

PH

Legendäres Mitglied
Bin gerade am basteln von SEO-friendly Links.

Für statische Seiten ist das kein Problem, jedoch habe ich auch Seiten, die ca. 20 bis 30 Parameter annehmen, und wolle wissen, wie ihr das löst.
Macht ihr das SEO-relevante über GET und die Parameter per POST oder wie?
 
Eine URL, die drei Parameter in Form von File- oder Directory-Namen enthält kann mittels Mod_Rewrite problemlos auf eine URL mit 20-30 GET-Parametern aufgelöst werden. WENN 17 oder 27 Parameter konstant gehalten werden (oder z.B. auch pro Folder in der ULR-Struktur ein paar konstante Parameter).

Die intern verwendete URL oder weitergereichte Daten sind ja unsichtbar, daher spielt das inmho keine Rolle. Warum also getrennt behandeln?

POST würde ich nur für Formulare mit persönlichen Eingaben nehmen. Und sowas dürfte ja keine verlinkbare URL ergeben. Überhaupt "SEO-Relevanz": die URL sind für mich auch Nutzerrelevant. Die möglichst kleinste verlinkbare URL, die von einem Nutzer aufgerufen werden kann, worüber dann der +/- gleiche Inhalt eingeblendet wird.

Falls eine tiefere Philosophie hinter Deiner Frage steckt, dann müsstest Du das erläutern.
 
Du musst dir das als suchformular vorstellen, mit einigen durch combobox und anderen frei einstellbaren werten vorstellen.

wenn ich das z.B. auf Immobilien anwenden wollte, dann sähen einige Parameter so aus:

Staat
Land
Landkreis
Stadt
typ (wohnung, haus, usw.)
zimmer
mit oder ohne pool
stockwerke
preis min, preis max
miete min, miete max
zimmer min
zimmer max
miete oder kauf
usw.

die ursprüngliche Abfrage sieht in etwa so aus: suche.php?staat=deutschland&land=hessen&typ=haus, usw.

Schön SEO-relevant verlinken lassen sich die hierarchischen Parameter, z.B. so: /Häuser/Miete/Deutschland/Hessen/Frankfurt/3-Zimmer

dann gibt es noch den ganzen Rattenschwanz an anderen Suchparametern, die nicht alle dabei sein müssen, und auch nicht zwingend in derselben Reihenfolge. In meinem Beispiel könnte man "Frankfurt" als Stadt auch weglassen, falls in ganz Hessen gesucht werden soll.

Das Problem spitzt sich zu, wenn ich jemandem einen direkten Link mit den relevanten Suchergebnissen schicken möchte, da dort ja alle Parameter erscheinen müssen.
.
.
.
instinktiv sage ich mir jetzt, dass ich wahrscheinlich nur eine handvoll parameter rewriten sollte und den rest in einen Super-Parameter verpacke, der dann vom skript wieder ausgepackt wird.

*kopfkratz*
 
ok! Das ist interessant. Ich schwadroniere ein bisschen. Auch wenn das vielleicht nicht in die gewollte Richtung geht.

Der Nutzer füllt z.B. Land, Bundesland, Stadt, Preis, mit Pool aus, und wird zur URL
www.domain.de/de/nrw/dortmundt/ weitergeleitet. Preis und "Pool" werden hintendurch mit Post weitergeleitet.

Das bedeutet ja, dass der Nutzer gleich das Gewünschte angezeigt bekommt. Gäbe er die URL allerdings per Email weiter, müsste das Programm sozusagen in der "Ergebnisseite" halt zusätzlich noch ein paar Filteroptionen ("nach Preis", "nach Ausstattung") einblenden.

Nutzt z.B. jemand der die URL per Email erhalten hat, dann einen Button mit "500 - 600 EUR", dann wird das per POST weitergegeben und man hätte unter derselben URL ein anderes Ergebnisset.

Ich habe da zwei Bedenken:
a) Usability: jemand mailt einem anderen die URL zu mit Hinweis auf z.B. "das Dritte Ergebnis".
b) Es ist nicht auszuschliessen, dass eine Suma/Qualityrater etc. Dein Formular ausfüllt und dann unter derselben URL zu unterschiedlichen Resultaten gelangt.

HINGEGEN:
hast Du Optimierungspotential zu kurzen URLs zu gelangen, wenn das Formular nicht stur Land, Bundesland und Stadt weitergibt, sondern nur die jeweils exakteste Eingabe. Also www.domain.de/bonn/ reicht. Das bedingt aber, dass das Formular überschüssiges rausfiltern kann und dass irgendwo in einer DB halt wieder drin steht, in welchem Bundesland Bonn läge. Tönt aufwändig...

Vielleicht tut es ein Mittelweg?
Warum nicht Land, BL, und diverse Angaben platzsparend encodieren?

z.B. www.domain.de/5fza/frankfurt/

Dann hast Du im Mittelteil ein wenig Müll. Aber 5 könnte Deutschland sein, f könnte Hessen bedeuten, z "5000-7500 EUR" und a "mit Balkon". Das heisst: Du würdest in diesem Fall "Frankfurt" optimieren (SEO) und bötest extrem kurze URLs an, die aber trotzdem auf Ergbnisseiten führen, die für alle "gleich" sind. Etc.

Die Diskussion natürlich unter Annahme, dass Dein eigentliches Problem woanders liegt!

Sagen wir so: Du hast ja noch Zeit, Strategien auf einem Blatt auszudenken. Aber nichts hält Dich doch ab, die unwichtigen Parameter auf ein Letter einzudampfen?
Was spräche gegen www.domain.de/hessen/z56/frankfurt/9ht/villa.htm ? [Hier wird insofern "Hessen", "Frankfurt" und "Villa" optimiert.
Man könnte sowas bestimmt auch so einrichten, dass auch
www.domain.de/hessen/z56/frankfurt/9ht/
www.domain.de/hessen/z56/frankfurt/
www.domain.de/hessen/z56/
www.domain.de/hessen/
sinnvolle Ergebnisse listen.
 
Noch was anzufügen. Du nennst ja SEO, daher gehe ich davon aus, dass es Dein Ziel ist, die Ergebnisseiten in die SERPS zu bringen:

eine Taktik mit vielen URLs bedingt, dass Du auch überall und jederzeit sinnvollen und unterscheidbaren Kontent ausliefern kannst. Ich kenne Leute, die mit tausenden, dann aber praktisch leeren URLs auf die Nase geflogen sind. [Wollten eigentlich Nutzergenerierten Content für gewisse Stichworte machen - Die Nutzer waren faul und das Stichwort reichte nicht als sinnvoller Content aus]. Sprich: Google hat die ganze Seite abgestraft - auch directories mit sinnvollem Content.

Sprich: es wäre zu vermeiden, alle möglichen Ergebnisseiten nach irgendeinem Schema zu verlinken. Bei sagen wir 20 Parametern mit jeweils 5 möglichen Werten macht das 5 hoch 20 Möglichkeiten. Ich bezweifle, dass es überhaupt soviele Häuser in Deutschland gäbe. Wenn eine Ergebnisseite mit dem Titel "Villen in Frankfurt mit Pool ab 3000 EUR" lediglich anzeigt "keine Resultate" hast Du ein gröberes Problem. Du könntest aber Villen in Nachbargemeinden in einer ähnlichen Preislage anzeigen. Dann klappt das bestimmt.

Das Problem ist hochkomplex. Ich glaube, möglichst viel Redundanz und unnnötige Parameter einzudampfen, ist bestimmt der erste Schritt.

Und nur sonebenbei: ich habe bei einer Domain 80 000 solcher Ergebnisseiten in den Serps. Das habe ich nicht so gewollt, daher sind die Seiten eher unteroptimiert - also gegenüber den 5000 handgeschriebenen Seiten. Aber ich will nur sagen, dass das Fluten von Google noch möglich ist.
 
hmmm... food for thought!

Natürlich ist der Hauptnutzen der, möglichst viele URLs, die weitgehend aus Keywords bestehen werden, in die SERPs zu bringen.
Deshalb nenne ich das Unterfangen auch "SEO-friendly URLs"

Ich habe da zwei Ziele, nämlich eigene Seiten damit auszurüsten und auch ein SEO-Modul in ein CMS zu integrieren, an dem ich gerade rumbastele.

Ich stelle mir das so vor, dass eine Datenbank aller Rewrite-URLs angelegt wird - der Admin des CMS kann festlegen, ob die URLs nach einem bestimmten Schema (also wie oben beschrieben) angelegt werden, oder auch einzelne URLs anlegen.
Für jede Seite gibt es auch totale Kontrolle über den Header der Seite (z.B. Tags oder auch canonical, usw.).

Dann zwei Knöpfe: "generate Sitemap" und "generate .htaccess"

Die beiden Funktionen könnten dann jeweils nach einem Content-Update laufen, so dass alte URLs eine Zeit lang mit einem "content expired" versehen werden und umgeleitet.


hmm hmm

dann kommen noch die anderen Probleme. z.B. wenn man eine Restaurant-Datenbank damit bewirtschaftet, wird es wohl vorkommen, dass ein Restaurantname mehrmals vorkommt.
Das muss die Mod-Rewrite Datenbank auch souverän hinbekommen, z.B. indem gesucht wird, wieviele Datensätze als Antwort auf die Anfrage kommen, und dann der Restaurantname z.B. durch die Datensatznummer ergänzt wird, so dass man eindeutige Verweise erhält.


Zurück zu meinem ersten Problem, ich denke ich werde so vorgehen, dass ich einige Felder/Keywords Rewrite, und dann die restlichen Suchkriterien in einen Sammel-Parameter verpacke, z.B. so:

www.meindings.de/wohnungen/hessen/frankfurt/?query=radius+30+zimmer+4+garage+1+lift+1+mietemax+2000

usw.

die Seiten würden alle auf canonical www.meindings.de/wohnungen/hessen/frankfurt verweisen

ist das eine gute Lösung?


P.S.
autsch - meine Seiten sind oft auch mehrsprachig...
die sprache kann vom Nutzer gewechselt werden, dann wird sie in der Session gespeichert.
muss noch hirnen, wie ich das verarbeite... :-/
 
ok, die query-parameter kann ich wohl mit dem mod_rewrite flag QSA übergeben, ohne dass diese in der URL erscheinen.

die Links innerhalb der Seite müssen wohl mit PHP sprachabhängig ersetzt werden unter Einsatz von Output Buffering.
 
Mehrsprachigkeit würde ich eher über de.domain.com lösen. Also klar und nach allgemein akzeptierten Standards (-> Wikipedia)

QUOTE dass ein Restaurantname mehrmals vorkommt.
Das muss die Mod-Rewrite Datenbank auch souverän hinbekommen, z.B. indem gesucht wird, wieviele Datensätze als Antwort auf die Anfrage kommen, und dann der Restaurantname z.B. durch die Datensatznummer ergänzt wird, so dass man eindeutige Verweise erhält.


z.B.: Indem das htaccess ein PHP-Skript aufruft, der je nach vorliegenden Informationen entweder direkt eine Ergebnisseite aufbaut ODER zuerst einen 301-redirect auf eine kanonische URL setzt. Wobei der 301 ja nur gesetzt wird, wenn es nötig ist. Die Links, die Du intern nutzt, um Seiten in den Index zu drücken - z.B. "Städte von A-Z mit McDonalds Restaurants" als Teil einer Sitemap oder "Sie interessieren sich für Frankfurt, vielleicht interessieren Sie Sich auch für Wiesbaden" als Teil einer Ergebnisseite - sind ja schon in der gebrauchsfertigen Form...
 
QUOTE (Peter Schneider @ Di 2.07.2013, 12:09) Mehrsprachigkeit würde ich eher über de.domain.com lösen. Also klar und nach allgemein akzeptierten Standards (-> Wikipedia)


QUOTE dass ein Restaurantname mehrmals vorkommt.
Das muss die Mod-Rewrite Datenbank auch souverän hinbekommen, z.B. indem gesucht wird, wieviele Datensätze als Antwort auf die Anfrage kommen, und dann der Restaurantname z.B. durch die Datensatznummer ergänzt wird, so dass man eindeutige Verweise erhält.


naja, der Punkt ist der, dass alle Inhalte in welcher Sprache auch immer von denselben Skripten erzeugt werden, das heisst jede Sprachspezifische URL wäre wie der ganze rest nur eine kosmetische Angelegenheit - aber geht das überhaupt, dass man mit ModRewite Subdomains vortäuscht?

Ich weiss nicht genau, welche Komplexität dadurch entsteht.

Ansonsten schwebte mir eher etwas im Format www.domain.com/de/... vor.

Gibts da gute Beispiele, wie man mit Mod Rewrite Subdomains vortäuscht?
 
QUOTE (Peter Schneider @ Di 2.07.2013, 12:23) Ich fände eine "Catch-All-Subdomain-Einstellung" auch nicht als Gelbes vom Ei.

genau, da fahre ich doch besser mit www.domain.com/de/... denke ich.

also Zusammenfassend:

das System funktioniert ohne SEO-friendly URLs zum Beispiel so:

search.php?staat=deutschland&land=hessen&stadt=Frankfurt&typ=haus&preismin=500000&radius=30

ich setze die Rewrites so, dass die URL zu folgendem wird:

/de/deutschland/hessen/frankfurt/haus.html wobei preismin=500000&radius=30 durch den QSA flag angehängt wird, aber nicht dem User angezeigt (wobei.... wäre es nicht besser, dies auch dem User anzuzeigen ??)
und
/fr/allemagne/hesse/francfort/maison.html und derselbe QSA Anhang

und dasselbe natürlich auch in English
/en/germany/hesse/francfort/house.html + QSA Anhang

(und in jeder anderen von der Webseite unterstützten Sprache, mit Ausnahme von anderen Charsets, denn bei mir kommen noch Russisch und Thailändisch und vielleicht noch Chinesisch dazu...)

=> ich muss Mal schauen, wie ich den QSA Anhang dazu bringe, angezeigt zu werden. Finde es besser, wenn der User einfach Deep Links aus der URL Leiste kopieren kann als einen "Permalink-Button" anzubieten.


ok... die Seite läuft durch Output Buffering bevor sie Angezeigt wird.
Per PHP fische ich die Sprache des Nutzers aus der Session raus und ersetze per str_replace alle Links durch die Rewritten-URLs, je nach was für diese Sprache angebracht ist.

Also von
search.php?staat=deutschland&land=hessen&stadt=Frankfurt&typ=haus&preismin=500000&radius=30
kommt search.php weg, das ? wird durch ein / ersetzt, dann die sprache aus der Session, z.B. en/ (auch als Default), dann staat=deutschland wird durch germany/ ersetzt, usw. bis zum erreichen des letzten Rewrite-Parameters, wenn vorhanden, also hier typ=haus, dann .html, und dann ? + die restliche Query.

dann hätte man sowas wie /en/germany/hesse/francfort/house.html?preismin=500000&radius=30

... puh!

ach so, und das canonical jeweils auf die Rewritten-URL ohne Parameter, also hier /en/germany/hesse/francfort/house.html
aber auch auf die /fr und /de Versionen


entdeckst Du da irgendwelche Lücken in diesem Vorgehen, Peter?


Edit: ich sehe gerade, dass diese voraussetzt, dass search.php die Suchparameter in irgendeiner Sprache akzeptiert. Die Sprache muss dann wohl als Parameter bei jeder URL mitgegeben werden.
 
Das tönt für mich vernünftig!

Es ist einfach wichtig, dass Duplicate Content und Soft-404-Seiten oder Seiten mit schwachem Content vermieden werden. Das muss im Skript abgefangen werden.

Anmerkung:
Das Beispiel per PN ist nicht wirklich stringent durchdacht. Im Prinzip ist das eine DC-Wüste, die einfach zig-tausende Links auf genormte, kleinere URLs setzt, die dann wirklich auch im Google-Index auftauchen...

Insofern ist kann man den Zwischenschritt mit einer ersten Ergebnisseiten-URL, die ein wenig mehr Parameter enthält durchaus gehen.
 
Ja, DC wirds bei mir wegen der hierarchischen URLs nicht geben, und auch keine leeren Seiten, da Seiten ohne Content keinen Rewrite bekommen, bzw. diese täglich per Cron Job entfernt/neu generiert werden, genauso wie die Sitemap.
 
Ich denke, Du bist deutlich fortgeschrittener in Deinen Überlegungen, als die Leute, deren Projekt ich Dir per PN zukommen liess.

Nur noch ein Nebengedanke: je mehr Ordner Du hast, desto gezielter kannst Du per robots-txt eingreifen, solltest Du mit irgendeiner Konfiguration Probleme bekommen. Ich denke, "Alle Ergebnisse aus Frankfurt" könnte man direkt im Ordnert www.domain.de/stadt/ auflisten. Das ist ja nur eine zusätzliche Linie in der htaccess.
 
QUOTE (Peter Schneider @ Di 2.07.2013, 16:22) Ich denke, Du bist deutlich fortgeschrittener in Deinen Überlegungen, als die Leute, deren Projekt ich Dir per PN zukommen liess.

Nur noch ein Nebengedanke: je mehr Ordner Du hast, desto gezielter kannst Du per robots-txt eingreifen, solltest Du mit irgendeiner Konfiguration Probleme bekommen. Ich denke, "Alle Ergebnisse aus Frankfurt" könnte man direkt im Ordnert www.domain.de/stadt/ auflisten. Das ist ja nur eine zusätzliche Linie in der htaccess.

Danke für die ganzen Tipps!

Da ich sozusagen beinahe auf der grünen Wiese anfange, ist es auch leichter, die Dinge strukturierter anzugehen.
smile.gif


so, jetzt blicke ich wohl auf ein Paar Wochen Umsetzung
:-/
 
Zurück
Oben