Title und Meta-Description in Extbase setzen

Gerade kürzlich stand ich vor dem Problem, dass ich in einem Extbase-Plugin, welches non-cacheable sein musste, den Title-Tag und die Meta-Description dynanisch aus der Extension setzen musste.
Der häufig genutzter Ansatz den Title und die Description im GLOBALS-Array zu überschreiben

$GLOBALS['TSFE']->page['title'] = $newTitle;
$GLOBALS['TSFE']->indexedDocTitle = $newTitle;
$GLOBALS['TSFE']->page['description'] = $newDescription;

was in dem Fall eines nicht-cachebaren Plugins leider nicht funktioniert. Daher habe ich dann einen eher einfachen aber effektiven Ansatz verfolgt. In den Projekt wird die seo_basics-Extension genutzt, also deaktivieren wir alle Head-Tags der seo_basics-Extensin im Typoscript-Template der entsprechenden Seite:

plugin.tx_seobasics >

Nun werden kein Title und keine Meta-Description mehr in den Head gerendert und wir können diese in unserer Extension „händisch“ mittels der addAddtionalHeaderData-Methode in unserem Controller neu setzen:

$title = '<title>' . $myNewTitle . '</title>';
$metaDescription = '<meta name="description" content="' .  $myNewMetaDescription . '">';
$this->response->addAdditionalHeaderData($title . PHP_EOL . $metaDescription);
Google+

6 thoughts on “Title und Meta-Description in Extbase setzen

  1. aus verschiedenen Gründen möchte ich mir meine Meta-Tags flexibel in typoscript zusammenbauen und dabei u.a. auch Parameter berücksichtigen die aus Extbase (eigene Extension) kommen.

    D.h. ich will z.B. den Titel des eines Objekts an typoscript übergeben und dort ausgeben. Ich bin zu folgender Lösung gekommen.

    1. Das ganze Objekt an typoscript übergeben
    {produkt -> f:cObject(typoscriptObjectPath: ‚lib.extMeta‘)}
    (oder nur einen Wert: {produkt.title -> f:cObject(typoscriptObjectPath: 'lib.extMeta.title')})

    2. Die einzelnen feld-werte in ein register schreiben:

    lib.extMeta = COA
    lib.extMeta.1 = LOAD_REGISTER
    lib.extMeta.1 {
    extMetaTitle.cObject = TEXT
    extMetaTitle.cObject.field = titel
    extMetaDescription.cObject = TEXT
    extMetaDescription.cObject.field = beschreibung
    extMetaKeywords.cObject = TEXT
    extMetaKeywords.cObject.field = keywords
    extMetaImg.cObject = TEXT
    extMetaImg.cObject.field = bilder
    }

    Nun kann z.B. der Titel direkt mit typoscript weiter manipuliert und ausgegeben werden:

    page.1001 = TEXT
    page.1001.value = {register:extMetaTitle}
    page.1001.wrap = {register:extMetaTitle}
    page.1001.insertData = 1

    page.headerData.1001 = TEXT
    page.headerData.1001.value = {register:extMetaTitle}
    page.headerData.1001.wrap = | {$pageTitleSuffix}
    page.headerData.1001.insertData = 1
    ...

    Stichworte: extbase typoscript meta daten, title, open graph image

  2. wenn ihr da schon angelangt seid:
    page.headerData.1001 = TEXT

    dann wäre:
    page.headerData.1001 = FLUIDTEMPLATE
    page.headerData.1001.file.dataWrap = ../template-{field:abc}-{register:whatever}.html
    page.headerData.1001.variables …
    page.headerData.1001.settings…

    die finale lösung, dann habt ihr alles:
    Header Data Template -> freie Wahl
    FluidViewhelper
    und natürlich TS via variables oder f:cObject

    😉

  3. Kann es sein das: $GLOBALS[‚TSFE‘]->page[‚description‘] nicht mehr funktioniert (TYPO3 7.6.9)? Wenn ich $GLOBALS[‚TSFE‘]->page debugge sehe ich zwar, dass die gewünschte Beschreibung gesetzt wird, allerdings erscheint diese nicht im Frontend. Muss noch irgendwas beachtet werden?

    Zurzeit nutze ich eine Alternative:
    $this->response->addAdditionalHeaderData(
    ‚getMetaDescription() .'“/>‘
    );

    aber wäre trotzdem mal interessant zu wissen, warum $GLOBALS[‚TSFE‘]->page[‚description‘] nicht funktioniert, denn $GLOBALS[‚TSFE‘]->page[‚title‘] = $product->getMetaTitle(); funktioniert ohne Probleme.

    1. entschuldige die späte Antwort, ich habe mich auch länger nicht mehr mit dem Thema beschäftigt. Das erscheint mir auch sehr inkonsistent. Interessant wäre auch wie sich das in 8.7 verhält.

Schreibe einen Kommentar

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