CMSms 1.x und SEO

CMS made simple ist grundsätzlich in der Lage, für Suchmaschinen optimierte URLs auszugeben. Die Feinheiten rund um Pretty URLs & SEO können hier diskutiert werden.
LeisureLarry

CMSms 1.x und SEO

Post by LeisureLarry »

Bin gerade über einen etwas älteren Blog-Eintrag gestolpert und habe daraufhin meine eigene Website etwas optimiert.

http://blog.markus-kindler.de/archives/8

Dort wird über ein Verhalten von CMSms berichtet, daß mich auch schon gestört hat.

http://www.xyz.de/abc.html
http://www.xyz.de/def/abc.html
http://www.xyz.de/abc.def

Alle dargestellten Links würden denselben Inhalt anzeigen, nämlich den Inhalt mit dem Alias abc. In einem geschäftlichen Umfeld könnten jedoch böse Zeitgenossen auf die Idee kommen, dieses Verhalten zu benutzen, um die Seite bei Google wegen duplicate Content bestrafen zu lassen.

Nun ist zum derzeitigen Zeitpunkt die hierarchiche URL-Erzeugung wegen Geschwindigkeitsproblemen sowieso nicht wirklich sinnvoll. Ausschalten würde man dieses Feature in der config.php:

$config[’use_hierarchy’] = false;

Dies macht leider keinen Sinn, wenn die Website schon mit der Struktur in Google erfasst ist, da man dann einen heiden Aufwand mit Umleitungen und ähnlichem hätte.

Danach kommt die eigentliche Arbeit, nämlich das Unterbinden aller unliebsamen URLs mittels .htaccess-Datei.

RewriteRule ^(.+)(.html)?$ index.php?page=$1 [QSA]

gegen tauschen:

RewriteRule ^([^/]+)\.html$ index.php?page=$1 [QSA]

Nun ist die Dateiendung zwingend .html und jegliche Unterordnerangaben führen zu einem Fehler 404.

Zusätzlich sollte nun noch die CMSms-Fehlerseite auch für die Fälle aktiviert werden, wenn die Anzeige der Seite nicht am Alias, sondern an einer Ordnerangabe oder einer Dateiendung scheitert. Dies geschieht auch wieder in der .htaccess-Datei:

ErrorDocument 404 /fehler-404.html

Der Alias fehler-404 darf natürlich nicht als Inhaltsseite existieren.

Eventuell wäre hierbei noch die Benutzung meines Tips aus dem nachfolgenden Thread sinnvoll:

http://forum.cmsmadesimple.org/index.ph ... 967.0.html

Kleiner Hinweis: Das CMS ist bei mir im Root-Verzeichnis meiner URL installiert, eventuell ergeben sich durch Installation in einen Unterordner (zB www.abc.de/cmsms) abweichende Lösungen.

Grüße aus Nürnberg
LeisureLarry (interiete.net)
Last edited by LeisureLarry on Wed Sep 10, 2008 5:15 pm, edited 1 time in total.
NaN

Re: CMS ms 1.x und SEO

Post by NaN »

Danke für diesen Hinweis.
Das dürfte dem ein oder anderen eine Menge Ärger ersparen.
LeisureLarry

Re: CMS ms 1.x und SEO

Post by LeisureLarry »

Gern geschehen, die Konkurrenz ist einem ja leider heutzutage selten wohlgesonnen ;-)
cyberman

Re: CMS ms 1.x und SEO

Post by cyberman »

LeisureLarry wrote: Der Alias fehler-404 darf natürlich nicht als Inhaltsseite existieren.
Interessant wäre an dieser Stelle, ob man irgend wie auf die in CMSms benutzerdefinierte Fehlerseite umleiten kann ...
LeisureLarry

Re: CMS ms 1.x und SEO

Post by LeisureLarry »

Der Alias fehler-404 darf natürlich nicht als Inhaltsseite existieren.
Wenn die Seite nicht existiert, kommt die Fehlerseite von CMSms, sofern dieses im Root der Domain eingerichtet wurde.
cyberman

Re: CMS ms 1.x und SEO

Post by cyberman »

OK, hab ich die Frage vllt. etwas ungenau gestellt.

Ich rufe eine bestimmte Seite zum Beispiel mit www.beispiel.de/index.php?page=muster auf.

Die Query-Variable der Seite ist aber seite, richtig wäre also www.beispiel.de/index.php?seite=muster auf.

Im ersten Fall lande ich dann auf der Startseite - Folge Double Content.

Wie kann ich derartige URL-Manipulationen verhindern bzw. schon bei dem Versuch eine 404er Fehlerseite anzeigen lassen?
Wiedmann
Forum Members
Forum Members
Posts: 233
Joined: Wed Mar 26, 2008 1:49 am
Location: Stuttgart / Germany

Re: CMS ms 1.x und SEO

Post by Wiedmann »

Ungefähr so:
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !^.*page=.*$
RewriteRule .* - [F,L]
Last edited by Wiedmann on Wed May 14, 2008 12:07 pm, edited 1 time in total.
cyberman

Re: CMS ms 1.x und SEO

Post by cyberman »

Kann man das noch etwas "allgemein gültiger" formulieren?

Wenn ich die rule richtig verstanden habe, stellt sie auf page ab ... und page ist ja nur eine Möglichkeit (von vielen).

Ich möchte als query var aber nur seite als Standard und mact für die Module zulassen  ::) ...
Wiedmann
Forum Members
Forum Members
Posts: 233
Joined: Wed Mar 26, 2008 1:49 am
Location: Stuttgart / Germany

Re: CMS ms 1.x und SEO

Post by Wiedmann »

Ungefähr so?

Code: Select all

RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !(page|mact)=
RewriteRule ^index.php - [F,L]
- Regel greift nur, wenn man überhaupt die "index.php" aufruft
- Regel greift nur, wenn "index.php" überhaupt Parameter hat
- Regel greift nur, wenn weder der Parameter "page" noch "mact" vorhanden ist.

"page" muss man halt anpassen an das, was man in der config.php ($config['query_var']) benutzt.
LeisureLarry

Re: CMS ms 1.x und SEO

Post by LeisureLarry »

Hab es für mich gerade ein bisserl anders realisiert.

Code: Select all

RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !^page=.*$
RewriteCond %{QUERY_STRING} !^mact=.*$
RewriteRule ^.*$ /error-404.html? [L,R=301]
Das hatte folgende Gründe. Die Regel soll greifen, sobald ein nicht leerer Query-String vorhanden ist und zwar egal ob die index.php angegeben wurde oder nicht. Man kann ja schließlich auch das index.php bei der URL komplett weglassen und direkt mit dem Query-String beginnen. Außerdem beginnen alle von CMSms generierten Query-Strings mit page bzw. mact und somit ist mir die Position innerhalb des Query-Strings wichtig. Zudem gefiel mir das [F,L] nicht, ich bevorzuge die Anzeige der CMSms-Fehlerseite.

Mein Dank an cyberman und Wiedman für die Problemmeldung und den Lösungsansatz.

Grüße aus Nürnberg
LeisureLarry (interiete.net)
Last edited by LeisureLarry on Wed May 14, 2008 1:07 pm, edited 1 time in total.
Wiedmann
Forum Members
Forum Members
Posts: 233
Joined: Wed Mar 26, 2008 1:49 am
Location: Stuttgart / Germany

Re: CMS ms 1.x und SEO

Post by Wiedmann »

Die Regel soll greifen, sobald ein nicht leerer Query-String vorhanden ist und zwar egal ob die index.php angegeben wurde oder nicht.
Du benutzt statische Stylesheets?
Man kann ja schließlich auch das index.php bei der URL komplett weglassen und direkt mit dem Query-String beginnen.
Deshalb greift die Regel trotzdem. Der Apache machcht ja dann voher einen internen Redirect, um das IndexDocument "Index.php" zu finden.
Außerdem beginnen alle von CMSms generierten Query-Strings mit page bzw. mact und somit ist mir die Position innerhalb des Query-Strings wichtig.

Code: Select all

RewriteCond %{QUERY_STRING} !^(page|mact)=
Zudem gefiel mir das [F,L] nicht, ich bevorzuge die Anzeige der CMSms-Fehlerseite.
So sagst du dem UA aber, dass die angeforderte Ressource durchaus existiert, nur an einer anderen Location. Du musst einen internal Redirect machen:

Code: Select all

RewriteRule ^.*$ /error-404.html? [L]
Und diese Seite muss dann den Statuscode 404 zum UA schicken.
LeisureLarry

Re: CMS ms 1.x und SEO

Post by LeisureLarry »

Wie im Eingangsposting dieses Beitrags geschrieben, existiert der Alias fehler-404 bei mir nicht. Dies führt dann zur Anzeige der internen CMSms-Fehlerseite, die bei mir den Statuscode 404 sendet. Wieso sage ich dem UA (und wofür steht UA) denn nun, daß und vor allem welche Ressource existiert? Zudem wo siehst Du den Vorteil in einem internen Redirect gegenüber einem externen, in diesem Fall?

Zu den anderen Sachen ja ich benutze eine Art von automatisch generierten statischen Stylesheets. Wie und wo wäre das relevant, damit ich das für die Zukunft im Hinterkopf behalte?

Zu der Sache mit der Angabe von index.php oder nicht, OK ist mir neu, aber ich lerne .htaccess auch nur durch Try and Error und bin noch relativ neu in der Materie.

Deine Kurzschreibweise für meine zwei Zeilen gefällt mir, ich war nur zu faul über die Auswirkungen von nicht (!) im Zusammenhang mit Oder (|) nachzudenken ;-)

Danke auf jeden Fall, ich lerne gerne dazu
LeisureLarry (interiete.net)
LeisureLarry

Re: CMS ms 1.x und SEO

Post by LeisureLarry »

OK, gerade noch einmal wo anders nachgesehen. Die dynamisch generierten Stylesheets werden über stylesheet.php?templateid=36... aufgerufen, die Angabe der index.php für unsere Regel ist also wie von Wiedmann geschrieben zwingend erforderlich, sonst klappt das mit den Stylesheets nicht mehr.
Wiedmann
Forum Members
Forum Members
Posts: 233
Joined: Wed Mar 26, 2008 1:49 am
Location: Stuttgart / Germany

Re: CMS ms 1.x und SEO

Post by Wiedmann »

Wie im Eingangsposting dieses Beitrags geschrieben, existiert der Alias fehler-404 bei mir nicht. Dies führt dann zur Anzeige der internen CMSms-Fehlerseite, die bei mir den Statuscode 404 sendet. Wieso sage ich dem UA (und wofür steht UA) denn nun, daß und vor allem welche Ressource existiert? Zudem wo siehst Du den Vorteil in einem internen Redirect gegenüber einem externen, in diesem Fall?
UA steht für UserAgent. Also die Software/User/System welches die Ressource auf deinem Server anfordert.

Der Statuscode 301 bewirkt ja nicht nur eine Umleitung, sondern hat auch eine Bedeutung (gerade für Suchmaschinen und/oder Proxys/Caches):
In deinem Fall sagst du der Suchmaschine, dass "index.php?seite=muster" eine gültige Ressource ist (bleibt im Cache/Index), diese aber (ab jetzt) immer unter einer anderen URI zu erreichen ist. Und diese neue URI für die gütlige alte URI wird dann nicht gefunden (404). In dieser Konfiguration sollte man dann aber eher 403 setzten und nicht 404 (kann CMSMS aber nicht).

(Oder oders gesagt, der UA erfährt bei einem 301 nur, dass "/error-404.html" nicht gültig ist. Aber nicht, dass  "index.php?seite=muster" nicht gültig ist)

Bei einem internen Redirect wird dem UA direct gesagt, dass "index.php?seite=muster" keine gültige Ressource ist (fliegt aus dem Cace/Index).

Die dynamisch generierten Stylesheets werden über stylesheet.php?templateid=36... aufgerufen,
Das meinte ich ;-)

BTW:
CMSMS erzeugt dann nachwievor noch selbst Double Content (Die Links zur Default Page). Falls jemand die MLE einsetzt, da gibt es dann einen Patch dagegen,
Last edited by Wiedmann on Wed May 14, 2008 2:41 pm, edited 1 time in total.
LeisureLarry

Re: CMS ms 1.x und SEO

Post by LeisureLarry »

Ok überzeugt, meine Angaben sehen nun wie folgt aus:

Code: Select all

RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !^(page|mact)=
RewriteRule ^index.php /error-404.html? [L]
Wegen dem Statuscode 404 kann ich nur anmerken, selbst den kann CMSms standardmäßig bei der Fehlerseite nicht. Zumindest als ich das zuletzt bei ner 1.2.x überprüft habe.

Leider gibt es selbst ohne MLE immer noch doppelten Content:

Code: Select all

/test.html
/index.php?page=test.html
Alle meine Versuche ne 301er Umleitung für Queries mit page-Angaben zu den pretty URLs funktionierten leider nicht. Falls da noch jemand ne Lösung für hat, wäre das echt klasse.

LeisureLarry (interiete.net)
Locked

Return to “Suchmaschinenoptimierung (SEO)”