Sie sind hier: Blog: CMSimple: Überschriften richtig nutzen
Beide CMS, CMSimple_XH und CMSimple 4.x, speichern alle Textinhalte auf dem Server in einer einzigen Datei (eine Textdatei, keine Datenbank), was beide Systeme schnell macht. Neue Seiten der obersten Menü-Ebene werden mit dem HTML-Element h1
(Überschrift 1. Ordnung) eingeleitet, egal ob man dafür den Editor oder den Pagemanager verwendet. Standardmäßig sind drei Menü-Ebenen eingestellt, wobei mit den HTML-Elementen h2
und h3
Seiten der zweiten bzw. dritten Menü-Ebene eingeleitet werden. Die hx
-Elemente werden also zur CMS-internen Seitensteuerung (Paginierung) verwendet.
Das bedeutet umgekehrt, daß mit dieser Standard-Einstellung auf den Seiten der obersten Menü-Ebene die Überschriften 2. und 3. Ordnung (HTML-Elemente h2
und h3
) nicht verwendet werden können. Auf den Seiten der zweiten Menü-Ebene können die Elemente h1
und h3
nicht genutzt werden, auf den Seiten der dritten Menü-Ebene keine h1
und h2
. Zur semantischen Strukturierung sind bei CMSimple dann also nur die HTML-Elemente h4
, h5
und h6
verfügbar.
Aktualisierung des Blog-Artikels: Bei CMSimple 4.x hat sich die beschriebene Sachlage mit Version 4.7 geändert, bei CMSimple_XH mit Version 1.7: siehe die neuen Abschnitte am Ende des Artikels (Link).
Nun ist es aber so, daß die Suchmaschine Google zur inhaltlichen Einordnung einer Webseite außer Titel (HTML-Element title
), Beschreibung (HTML-Element meta description
), Text der Seite (vor allem am Seitenanfang) und Linktexten eingehender Links vor allem die Überschriften 1., 2. und 3. Ordnung (also die HTML-Elemente h1
, h2
und h3
) der Seite heranzieht. Wobei das alles inhaltlich zusammenpassen muß. Nur der Vollständigkeit halber: Den Inhalt des HTML-Elements meta keywords
berücksichtigt Google nicht.
Die Überschriften sollten zudem semantisch richtig verwendet werden: So sollte nur ein einziges h1
-Element je Seite vorhanden sein, und zwar inhaltlich als Haupt-Überschrift und im Quelltext weit oben platziert. Weitere Überschriften müssen hierarchisch angeordnet werden. Richtig wären zum Beispiel die Reihenfolgen h1 h2 h3 h3 h2 h3
oder h1 h2 h2
. Falsch wären die Anordnungen h1 h3 h3 h2
oder h2 h3 h3 h2 h3 h1
oder (CMSimple-typisch) h1 h1 h4 h5
. (Beachten Sie, daß meine vereinfachte Darstellung nötige Inhalts-Elemente wie Fließtext in Absätzen oder Informationen in Listen außer Acht läßt.)
Die HTML-Elemente h4
, h5
und h6
sind bei Google bedeutungslos: Schon ein mit dem Element strong
ausgezeichnetes Wort im Fließtext hat bei Google mehr Gewicht als eine Überschrift 4. Ordnung.
Wir sehen also, daß die Überschriften 1., 2. und 3. Ordnung in CMSimple inhaltlich und semantisch nicht völlig google-gerecht genutzt werden können, zumindest nicht ohne nachträgliche Eingriffe. Aus heutiger Sicht vielleicht ein Geburtsfehler, aber als Peter Harteg ab dem Jahr 1999 das CMS CMSimple entwickelte, war noch gar nicht absehbar, auf welche Signale Google später Wert legen würde.
Den Entwicklern von CMSimple_XH ist das Problem durchaus bewußt, wie zum Beispiel diese Forums-Diskussion zeigt. Dort schlägt svasti
vor, zur Seitensteuerung andere Kriterien als die HTML-Überschrifts-Elemente zu verwenden, damit diese uneingeschränkt für semantische Zwecke verfügbar sind. Wie einem späteren Beitrag von cmb
zu entnehmen ist, stößt die Umsetzung dieser Idee aber offensichtlich auf mehrere Schwierigkeiten technischer Art. Außerdem wird in der Diskussion eine gewisse Befürchtung deutlich, daß mit einer solchen Änderung die CMSimple-Grundidee verraten würde.
Von zwei CMSimple_XH-Entwicklern gibt es Lösungen, die ohne grundlegende Änderung der CMS-Funktionalität und ohne Änderung des vorhandenen Datenbestands auskommen: Vor Auslieferung der angeforderten CMSimple-Seiten an den Browser oder Crawler werden per Server-Script die in content()
enthaltenen hx
-Elemente höherwertig umgesetzt (das funktioniert vermutlich auch unter CMSimple 4.x). Hier die Links zu den beiden (englisch-sprachigen) Anleitungen:
(Kurz beschrieben auf Deutsch:) Die höchste vorhandene content()-hx
wird umgesetzt in h1
. Sie wäre aber das zweite Vorkommen von h1
, wenn (zB im Standard-Template) schon (oder noch?) eine Kopfzeilen-h1
vorhanden ist.
(Kurz beschrieben auf Deutsch:) Hier werden umgesetzt (bzw. nicht umgesetzt):
content()-h1
wird umgesetzt in h2
content()-h2
wird nicht umgesetzt (bleibt h2
)content()-h3
wird umgesetzt in h2
content()-h4
wird umgesetzt in h3
Damit wäre eine ggf. (im Standard-Template) vorhandene Kopfzeilen-h1
das einzige Vorkommen von h1
.
Solche Krücken-Lösungen haben aus meiner Sicht aber zwei Nachteile, wobei der geringfügig höhere Bedarf an Rechenzeit auf dem Server noch der kleinere ist. Mich persönlich würde viel mehr stören, daß ich bei jeder Überschriften-Verwendung um die Ecke denken
müßte: welches hx
-Element muß ich jetzt verwenden, damit am Ende ein bestimmtes anderes rauskommt? Deshalb verwende ich so etwas nicht, sondern ...
Auf meiner kleinen CMSimple-Website komme ich mit einer einzigen Menü-Ebene aus. Also schalte ich die Menü-Ebenen zwei und drei aus (beschrieben nach CMSimple 4.x): Im Admin-Bereich unter Einstellungen
-> CMS -> Menu -> Levels habe ich die Standard-Einstellung 3 (Menü-Ebenen) in 1 geändert. Folge: Mit der Verwendung der HTML-Elemente h2
und h3
werden keine neuen Seiten mehr angelegt (weder im Editor noch im Pagemanager). Stattdessen kann ich auf allen Seiten der 1. Ebene auch die Überschriften h2
und h3
verwenden.
Egal, ob man ein fertiges CMSimple-Template von der Stange oder (wie ich) ein selbst erstelltes Template verwendet: im generierten Seiten-Quelltext sollte das Überschrifts-Element h1
nur einmal vorkommen. Über den Einschub <?php echo content();?>
in der template.htm
wird für eine Seite der 1. Ebene standardmäßig ein Überschrifts-Element h1
ausgegeben. Auf dieses Vorkommen der h1
im generierten Quelltext besteht in der template.htm
kein Zugriff. Hier zwei Szenarien:
1. Szenario:
Wer die standardmäßige h1
-Generierung für eine Seite der 1. Ebene über den Einschub <?php echo content();?>
beibehält, sollte in seiner CMSimple-template.htm
nicht noch zusätzlich ein weiteres Vorkommen der h1
für die Kopfzeile festlegen. Wenn ein Standard-Template genutzt wird, in dem ein zusätzliches Vorkommen der h1
definiert ist (zB über den Code-Schnippsel <h1><?php echo sitename();?></h1>
), sollten (a) dieses h1
-Element als Hülle besser entfernt, (b) für die Festlegung der Schriftgröße ggf. ein div-Element verwendet (<div class="wieh1"><?php echo sitename();?></div>
) und (c) die Eigenschaften der div
-Klasse wieh1
in der Template-stylesheet.css
geregelt werden. Ein Nachteil dieser div
-Lösung besteht jedoch darin, daß schon vor der content()-h1
Text ausgegeben würde, wo doch Google die Überschrift 1. Ordnung ganz oben erwartet.
2. Szenario:
Wer die Überschrift 1. Ordnung lieber schon im Kopf der Seite haben will und/oder in seinem selbst erstellten Template gerne individuelle Überschriften 1. Ordnung verwendet, oder wer ein Standard-Template nutzt und einen darin enthaltenen Code-Schnippsel in der Art wie <h1><?php echo sitename();?></h1>
beibehalten will, sollte umgekehrt dafür sorgen, daß über den Einschub <?php echo content();?>
in der template.htm
von CMSimple kein weiteres h1
-Element generiert wird. Hierzu wählt man (beschrieben nach CMSimple 4.x) im Admin-Bereich unter Bearbeiten
-> (Seite auswählen) -> Seite -> Andere Seitenüberschrift die Option ja
aus, läßt das Eingabefeld für die andere Seitenüberschrift
jedoch leer: Damit wird für diese Seite keine zweite
h1
generiert (die Seitenüberschrift, mit der die betreffende Seite im Menü verlinkt ist, wird nur im Editor-Modus noch zusätzlich angezeigt).
Wer, wie oben beschrieben, die nicht benötigten Menüebenen ausgeschaltet hat, kann auch auf Seiten der 1. Ebene die Überschriften h2
und h3
verwenden. Hierzu ganz einfach im Editor je nach Textumfang an den gewünschten Stellen h2
- und h3
-Elemente platzieren. Die erste (oder einzige) Überschrift 2. Ordnung kann schon vor dem ersten Fließtext angeordnet werden.
Das Vorgehen klingt zunächst recht kompliziert, ist aber schneller erledigt als gelesen. Ich erläutere die Maßnahmen kurz anhand meiner Seite Rechtschreibung
als Beispiel-Seite:
h1
-Überschrift, die in der Kopfzeile angezeigt wird, habe ich in meiner template.htm
festgelegt: Gösta Thomas, ich selbst
h1
-Überschrift der Seite (content()-h1
), festgelegt im Pagemanager, ist Rechtschreibung(sichtbar im Menü)
Andere Seitenüberschrift -> jaausgewählt, das entsprechende Eingabefeld jedoch leer gelassen (verhindert die Anzeige dieser
h1
)h2
eingefügt: Rechtschreibung und Schreibweise, anschließend folgt der einleitende Satz
h3
-Element (von Traditionelle oder Neue Rechtschreibung?bis
Silbentrennung per CSS-Regel)
Das war's auch schon, ganz simple
;-) Das Ergebnis ist eine semantisch richtig aufgebaute, google-freundliche CMSimple-Seite. Funktioniert aber, wie gesagt, nur dann, wenn man sich auf eine Menü-Ebene beschränkt. Für viele mit CMSimple (XH oder 4.x) erstellte Websites dürfte aber eine einzige Menü-Ebene ausreichen.
(Aktualisierung am 11.06.2017)
Mit CMSimple Version 4.7 vom 16.03.2017 wurde zusätzlich eine neue Methode zur CMS-internen Seitensteuerung eingeführt. Damit können alle hx
-Elemente, also h1
bis h6
, auf allen Seiten (egal welcher Menüebene) verwendet werden. Diese neue Methode kann auf Wunsch in den Einstellungen
aktiviert werden (sinnvoll bei neu zu erstellenden Websites). Bestehende CMSimple-Websites werden bei einem Update nicht zwangsweise auf das neue Verfahren umgestellt, es gibt aber ein Konvertierungs-Script.
(Aktualisierung am 28.09.2017)
CMSimple_XH hat nachgezogen: Seit der XH Version 1.7.0 vom 02.07.2017 wurde die CMS-interne Seitensteuerung auf HTML-Kommentare umgestellt. Damit können auch in diesem CMS alle hx
-Elemente, also h1
bis h6
, auf allen Seiten (egal welcher Menüebene) verwendet werden. Offensichtlich ist das Update von älteren CMS-Versionen aber mit einem gewissen Aufwand verbunden, zumal mit Version 1.7 noch weitere wesentliche Änderungen eingeführt wurden. In der deutschsprachigen Abteilung des CMSimple_XH-Forums gibt es zudem eine Liste von Plugins, die zur neuen Version 1.7.0 unverträglich sind.
veröffentlicht in kat_CMSimple