SERP-Preview

Alles rund um Module und Plugins in CONTENIDO 4.10.
Antworten
McHubi
Beiträge: 1075
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

SERP-Preview

Beitrag von McHubi » Fr 29. Mär 2019, 20:04

Hallo zusammen,

das sistrix-Tool für die Vorschau auf das Aussehen eines Suchmaschinen-Treffers kennen sicher viele von euch: https://app.sistrix.com/de/serp-snippet-generator

Aktuell kann man zwar im Artikel-Reiter "SEO" über die HTML-Ansicht links unten die Meta-Angaben anzeigen lassen, die helfen aber Redakteuren jetzt nicht wirklich weiter.

Da beim sistrix-Tool eigentlich bloß drei Strings in unterschiedlichen Farben und bei Bedarf gekürzt dargestellt werden, sollte das also nicht allzu schwer sein nachzubilden. Ist es in der Tat nicht. Es reicht, ganz am Ende der root/contenido/includes/include.con_meta_form.php diese Zeilen anzuhängen:

Code: Alles auswählen

/******************** SERP-preview modifications begin ********************/
/* this is just a copy of the output-code of module head_title, 
but at the end the generated title must not be echoed but written into variable 
$title_of_module_head_title. have a look at marker "variable instead of echo"*/

/* output-code of module head_title begin */
$breadcrumb = array();

// get category path
$helper = cCategoryHelper::getInstance();
foreach ($helper->getCategoryPath(cRegistry::getCategoryId(), 1) as $categoryLang) {
    $breadcrumb[] = $categoryLang->get('name');
}

// load current article information
$article = new cApiArticleLanguage();
$article->loadByArticleAndLanguageId(cRegistry::getArticleId(), cRegistry::getLanguageId());
$headline = strip_tags($article->getContent('CMS_HTMLHEAD', 1));

// append headline of article if existing
if ($headline != '') {
    $breadcrumb[] = $headline;
}

if ($headline === '') {
    $breadcrumb[] = conHtmlSpecialChars(mi18n("STARTPAGE"));
}

array_shift($breadcrumb);

if (count($breadcrumb) > 0) {
    $title_of_module_head_title=implode(' - ', $breadcrumb).' | Spielwiese'; //"variable instead of echo"
}
/* output-code of module head_title end */

$title_length=getEffectiveSetting('seo_serp_preview_title', 'length', 60);
$url_length=getEffectiveSetting('seo_serp_preview_url', 'length', 93);
$description_length=getEffectiveSetting('seo_serp_preview_description', 'length', 150);

echo '<br/><h3>Google SERP Preview</h3>
<div style="color: #660099; font-size: 1.5em; margin-top: 1em;">';
if($art->getField('pagetitle')!="")
  {
  echo substr(conHtmlSpecialChars(cSecurity::unFilter(stripslashes($art->getField('pagetitle')))),0,$title_length);
  if(strlen(conHtmlSpecialChars(cSecurity::unFilter(stripslashes($art->getField('pagetitle')))))>$title_length) echo '...';
  }
  else
    {
    echo substr($title_of_module_head_title,0,$title_length);
    if(strlen($title_of_module_head_title)>$title_length) echo '...';
    }

echo '</div>
<div style="color: #006621; line-height: 1.7em;">'.substr(cUri::getInstance()->build(array(
    'idart' => $art->get('idart'),
    'lang' => $art->get('idlang')
), true),0,$url_length);
if(strlen(cUri::getInstance()->build(array(
    'idart' => $art->get('idart'),
    'lang' => $art->get('idlang')
), true))>$url_length) echo '...';
echo '</div>
<div style="color: #777777; line-height: 1.7em; width: 50em;">'.substr($metaPreview[2][content],0,$description_length);
if(strlen($metaPreview[2][content])>$description_length) echo '...';
echo '</div>';
/******************** SERP-preview modifications end ********************/
Der erste Teil besteht aus einer - fast - 1 zu 1 Kopie des im Modul "head_title" verwendeten Codes der Modulausgabe, da im Reiter "SEO" der automatisch generierte Title nicht abgegriffen werden kann und nur der manuelle Title ausgelesen wird. Am Ende des Codes wird der Title jedoch nicht per echo ausgegeben sondern in eine Variable geschrieben, die im weitern Verlauf verwendet wird.

Ggf. hat jemand von euch eine bessere Idee auf Lager, wie man die Kopie der Modulausgabe umgehen und den automatisch generierten Title direkt auslesen kann.

Da Google immer mal wieder gerne die Maximallängen anpasst, lässt sich das auch über die Mandanteneinstellungen festlegen:

seo_serp_preview_title | length | 60
seo_serp_preview_url | length | 93
seo_serp_preview_description | length | 150
google-serp-preview-001.jpg
(116.87 KiB) Noch nie heruntergeladen
Wichtig: Da dies eine Core-Erweiterung ist, muss die Anpassung bei einem Update aller Voraussicht nach erneut eingetragen werden.
Zuletzt geändert von McHubi am So 31. Mär 2019, 11:19, insgesamt 3-mal geändert.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

(NEU!) Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1448
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: SERP-Preview

Beitrag von Faar » Fr 29. Mär 2019, 20:40

:shock:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

McHubi
Beiträge: 1075
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: SERP-Preview

Beitrag von McHubi » Fr 29. Mär 2019, 21:18

:shock: :arrow: :?:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

(NEU!) Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

bodil
Beiträge: 131
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: SERP-Preview

Beitrag von bodil » Sa 30. Mär 2019, 10:29

Schöne Idee!
Fehlt in deinem Code möglicherweise die Stelle, wo du die Mandantendaten ausliest?
Meine Ausgabe sieht etwa so aus:



McHubi
Beiträge: 1075
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: SERP-Preview

Beitrag von McHubi » Sa 30. Mär 2019, 20:01

Hm...
Also es werden die Daten aus der Core Datei verwendet - bis auf den Title. Der kommt nur bei Angabe im seo-Reiter auch aus der Core Datei. Ansonsten wird er exakt wie im Modul head_title ermittelt. Du solltest also zumindest bei URL und description Daten bekommen.

Die... Punkte erscheinen eigentlich nur dann, wenn der String gekürzt wird. Das bei Dir davor keine Infos aus dem Reiter wiederholt werden, ist kurios.

Hast Du ein Mehrmandantensystem?
Kann den Fehler nicht nachstellen.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

(NEU!) Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

bodil
Beiträge: 131
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: SERP-Preview

Beitrag von bodil » Sa 30. Mär 2019, 20:30

Ich habe vor deinen Code noch das hier gesetzt:

Code: Alles auswählen

$title_length = getEffectiveSetting('seo_serp_preview_title', 'length', 60);
$description_length = getEffectiveSetting('seo_serp_preview_description', 'length', 150);
$url_length = getEffectiveSetting('seo_serp_preview_url', 'length', 93);
Dann gings! :)
Sehr schöne Ergänzung. In meinem Fall gar nicht so arg für die Ausreitzung der SEO, eher um Kunden klar zu machen, was das bedeutet, was sie wo eintragen. Vielen Dank dafür!

McHubi
Beiträge: 1075
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: SERP-Preview

Beitrag von McHubi » So 31. Mär 2019, 11:23

Arrgh... Danke für den Hinweis! Die drei Zeilen hab ich in der Tat nicht mit reinkopiert... :? Shame on me... Sind jetzt hinzugefügt im ersten Post.
Sehr schöne Ergänzung. In meinem Fall gar nicht so arg für die Ausreitzung der SEO, eher um Kunden klar zu machen, was das bedeutet, was sie wo eintragen. Vielen Dank dafür!
Gerne! Manchmal bringen selbst kleine Dinge echten Mehrwert. :D
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

(NEU!) Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1448
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: SERP-Preview

Beitrag von Faar » Mo 1. Apr 2019, 09:39

McHubi hat geschrieben:
So 31. Mär 2019, 11:23
Shame on me...
ja :|
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Antworten