Drupal-SEO: Automatische Meta-Tags aus dem Inhalt mit Rules

Es war mir lange Zeit ein Rätsel, aber jetzt ist die einfachste und flexibelste Lösung da. Die will ich niemandem vorenthalten. Ziel ist es, dass einfache Seiten ein Feld für Meta-Daten wie „Description“ erhalten. Lässt der Redakteur das Feld leer, generiert sich das System die Inhalte aus anderen Feldern, z.B. aus dem Textkörper (body). Hier die Anleitung:

Voraussetzungen:

  1. Drupal 7
  2. Das Modul „Meta Tags quick“ sollte installiert sein (drush dl metatags-quick usw.)
  3. Die Module „Rules„, „Entity API“ und „Token“ sollte ebenfalls installiert werden (drush dl rules token entity usw.)
  4. Alle Module inklusive Core-Modul „PHP Filter“ aktivieren: drush en metatags-quick, rules rules_admin token php

Inhaltstypen anpassen:

  1. Bei gewünschten Inhaltstypen („Einfache Seite“) ein Feld „field_meta_description“ vom Typ „Meta“ anlegen, als Meta Name erhält das Feld den Wert „description“
  2. ggf. weitere Felder vom Typ Meta anlegen

Jetzt könnte man sagen: „Das reicht doch.“ Aber leider vergessen doch die meisten Redakteure, dieses Meta-Feld dann auch für jede Seite zu füllen. Ein Pflicht-Feld könnte dabei helfen, aber das wollen wir dem eiligen Redakteur auch nicht zumuten. Also muss eine Automatisierung hin. Dazu nutzen wir Rules:

Eine einfache SEO-Rule erstellen:

  1. Eine neue Rule „Automatische Meta-Tags“ wird festgelegt
  2. Als Event nehmen wir „Node – Der Inhalt ist abgerufen worden“
  3. Zusätzliche Bedingung: Feld existiert node:field_meta_description
  4. Zusätzliche Bedingung: Feld node:field_meta_description ist nicht leer
  5. Als erste Action nehmen wir „Eine Variable hinzufügen„. Als Typ wählen wir „Text“, Wert ist node:body:value, Bezeichnung ist „Bodytext“, Variablenname ist „bodytext“. Speichern.
  6. Als zweite Action nehmen wir „Set a meta tag on the page„. Als META NAME schreiben wir „description“ in das Textfeld, da der Meta-Tag ja so heißt. Als META VALUE fügen wir den gewünschten PHP-Code ein, der den Bodytext auf 200 Zeichen kürzt und überflüssige Leerstellen und Umbrüche entfernt:
<?php
$maxlength = 200; // Länge auf 200 Zeichen kürzen
$wrapper = "\0";  // Ein Trennzeichen für meine Kürzungsfunktion
// Kürzung des Bodytextes
$wordwrap = wordwrap($bodytext, $maxlength, $wrapper); //Trennzeichen einfügen Wortteilung
$description = substr($wordwrap, 0, strpos($wordwrap, $wrapper)); // Bis Trennzeichen schneiden
$description = trim( preg_replace( '#\s+#' , ' ' , $description ) );  // mehrfache Leerzeichen raus
return $description; // Rückgabe des gekürzten Textes
?>

Fazit:

Auf diese Art lässt sich der Inhalt jedes Feldes extrahieren und nach eigenen PHP-Transformationen in einen Meta-Tag der aktuellen Seite verwandeln.

 

1 Gedanke zu „Drupal-SEO: Automatische Meta-Tags aus dem Inhalt mit Rules“

  1. Hallo,

    ich habe versucht das ganze nachzustellen.
    Meine Seite läuft mit Drupal7, aktuelle Version.

    Das Feld Metatags wird bei der eingabe nicht angezeigt,
    das wird wohl auch so sien … oder ?

    Mein Problem beginnt bei dem erstellen der RULES.
    Der Event … klar.
    Die Action … auch klar.

    Ich habe nicht hinbekommen die Bedingungen einzutragen.

    Und es wird zu diesem Zeitpunkt ( also ohne Bedingungen ) kein Feld Description im erstellten Beitrag im Quelltext angezeigt … ist das so ?
    ————————————–
    Wenn ich nun versuche eine Bedingung einzugeben,
    dann …
    Add Condition
    Entiti has Field
    –> Und hier sterbe ich bei der Eingae bei „Data Selector .

    Ich bekomme es nicht hin.
    Für Hilfe wäre ich dankbar.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *