DEPRECATION WARNING

This documentation is not using the current rendering mechanism and is probably outdated. The extension maintainer should switch to the new system. Details on how to use the rendering mechanism can be found here.

Developer Manual

This developer manual is not needed in most cases, at not to let MetaSEO render meta tags and a site map. Most users want to skip this section, respectively.

By reading this section, you learn how to

  • manipulate the stdWraps MetaSEO uses
  • customize the tracking code in JavaScript
  • customize which document types MetaSEO will index for the site map
  • interconnect another extension via MetaSEO's hooks and signals

This should be necessary only in very rare cases.

Manipulating stdWraps

If you want to modify the output of metaseo, you can change stdWraps in the TypoScript setup of your template.

MetaTags

TypoScript Node Description Type
plugin.metaseo.metaTags.stdWrap.title Manipulation for title stdWrap
plugin.metaseo.metaTags.stdWrap.description Manipulation for description stdWrap
plugin.metaseo.metaTags.stdWrap.keywords Manipulation for keywords stdWrap
plugin.metaseo.metaTags.stdWrap.copyright Manipulation for copyright stdWrap
plugin.metaseo.metaTags.stdWrap.language Manipulation for language stdWrap
plugin.metaseo.metaTags.stdWrap.email Manipulation for email stdWrap
plugin.metaseo.metaTags.stdWrap.author Manipulation for author stdWrap
plugin.metaseo.metaTags.stdWrap.publisher Manipulation for publisher stdWrap
plugin.metaseo.metaTags.stdWrap.distribution Manipulation for distribution stdWrap
plugin.metaseo.metaTags.stdWrap.rating Manipulation for rating stdWrap
plugin.metaseo.metaTags.stdWrap.lastUpdate Manipulation for last update (date) stdWrap

PageTitle

TypoScript Node Description Type
plugin.metaseo.pageTitle.caching Enables caching of page title. If the page is fully cacheable you don't have to enable this option. If you use USER_INTs and one USER plugin changes page title (eg. via Connector) than this is not working because the output of the USER plugin is cached and the Connector not called again with the second hit. The caching fixes that issue. boolean
plugin.metaseo.pageTitle.stdWrap.before Manipulation of the raw page title (before MetaSEO processing) stdWrap
plugin.metaseo.pageTitle.stdWrap.after Manipulation of the processed page title (after MetaSEO processing) stdWrap
plugin.metaseo.pageTitle.stdWrap.sitetitle Manipulation of the sitetitle (from the TS-Setup-Template) stdWrap

Google Analyitics / Piwik customizations

Customization codes (fast/simple)

You can add additional javascript code to the default Google Analytics and/or Piwik integration.

TypoScript Node Description Type
plugin.metaseo.services.googleAnalytics.customizationCode Customization code for Google Analytics TS-Content Object (TEXT, COA, ...)
plugin.metaseo.services.piwik.customizationCode Customization code for Piwik TS-Content Object (TEXT, COA, ...)

Example for Google Analytics in TypoScript-Setup:

plugin.metaseo.services.googleAnalytics.customizationCode = COA
plugin.metaseo.services.googleAnalytics.customizationCode {
    10 = TEXT
    10.value (
        _gaq.push(['_setClientInfo', false]);
        _gaq.push(['_setAllowHash', false]);
        _gaq.push(['_setDetectFlash', false]);
        _gaq.push(['_setDetectTitle', false]);
    )
}

Template customization (advanced)

The Google Analytics and Piwik integration is done by using a FLUIDTEMPLATE object in TypoScript. If you don't like the integration and want to modify the integration feel free to use your own templates and pass your own variables to FLUIDTEMPLATE.

TypoScript Node Description Type
plugin.metaseo.services.googleAnalytics.template Template rendering object for Google Analytics (contains a FLUIDTEMPLATE) COA
plugin.metaseo.services.piwik.template Template rendering object for Piwik (contains a FLUIDTEMPLATE) COA

It's quite easy, for more information read:

Example for your own Google Analytics Template:

## Google Analytics template
plugin.metaseo.services.googleAnalytics.template.10.file = fileadmin/templates/service-ga.html

## if you need some variables you also can set these:
plugin.metaseo.services.googleAnalytics.template.10.variables {
  myOwnStuff = TEXT
  myOwnStuff.value = foobar
}

Sitemap

TypoScript Node Description Type
plugin.metaseo.sitemap.index.blacklist

List of Regular Expression for blacklisting URLs while indexing, eg.

10 = /typo3/ 20 = /foobar/ 30 = /imprint/i 40 = /[a-z]/

List
plugin.metaseo.sitemap.index.pageTypeBlacklist List of blacklisted page typeNums (SetupTS PAGE objects) String, comma separated
plugin.metaseo.sitemap.index.fileExtension

List of allowed file extensions for indexing

Default: 1 = pdf 2 = doc,docx,xls,xlsx,ppt,pptx 3 = odt,odp,ods,odg

List

Signals

For a list of Signals see the "Hooks" section down below. This is an example used to interconnect extensions:

<?php
// ----------------------------------------------------------------------------
// Example of MetaSEO Signals
//
// Example integration (e. g. in localconf.php or ext_localconf.php):
//
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);
$signalSlotDispatcher->connect(
    \Metaseo\Metaseo\Page\Part\MetatagPart::class,  // Signal class name
    'metatagOutput',                                // Signal name
    \Vendor\Extension\Signals\MetaseoExtend::class, // Slot class name
    'metatagOutput'                                 // Slot name
);
// ----------------------------------------------------------------------------

class MetaseoExtend {
    /**
     * Metaseo Signal for page metadata
     * see -> \Metaseo\Metaseo\Page\Part\MetatagPart->processMetaTags
     *
     * @param $args
     * @param $obj
     * @return array
     */
    public function metatagOutput($args, $obj) {
        // Modify the parameter $args here
        $args["meta.description"]["attributes"]["content"] = "newDescription";

        return array($args, $obj);
    }
}

Hooks

All hooks are also available as Extbase Signal. Please use signals instead of hooks.

<?php
// ----------------------------------------------------------------------------
// Example of MetaSEO Hooks
//
// Example integrations (eg. in localconf.php or ext_localconf.php):
//
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['metatagSetup'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_metatagSetup';
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['metatagOutput'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_metatagOutput';
//
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['pageTitleSetup'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_pagetitleSetup';
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['pageTitleOutput'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_pagetitleOutput';
//
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['pageFooterSetup'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_pagefooterSetup';
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['pageFooterOutput'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_pagefooterOutput';
//
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['sitemapIndexPage'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_sitemapIndexPage';
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['sitemapIndexLink'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_sitemapIndexLink';
//
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['sitemapSetup'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_sitemapSetup';
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['sitemapTextOutput'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_sitemapTextOutput';
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['sitemapXmlIndexSitemapList'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_sitemapXmlIndexSitemapList';
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['sitemapXmlIndexOutput'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_sitemapXmlIndexOutput';
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['sitemapXmlPageOutput'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_sitemapXmlPageOutput';
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['sitemapClear'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_sitemapClear';
//
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['robotsTxtMarker'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_robotsTxtMarker';
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['robotsTxtOutput'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_robotsTxtOutput';
//
// $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['metaseo']['hooks']['httpHeaderOutput'][] = 'EXT:metaseo/examples/hooks.php:user_metaseo_hook->hook_httpHeaderOutput';
// ----------------------------------------------------------------------------

class user_metaseo_hook {

    public function hook_metatagSetup(&$args, $obj) {
        // Hook for metatag setup
    }

    public function hook_metatagOutput(&$args, $obj) {
        // Hook for metatag output
    }

    // ------------------------------------------------------------------------

    public function hook_pagetitleSetup(&$args, $obj) {
        // Hook for pagetitle setup
    }

    public function hook_pagetitleOutput(&$args, $obj) {
        // Hook for pagetitle output
    }

    // ------------------------------------------------------------------------

    public function hook_pagefooterSetup(&$args, $obj) {
        // Hook for page footer setup
    }

    public function hook_pagefooterOutput(&$args, $obj) {
        // Hook for page footer output
    }

    // ------------------------------------------------------------------------

    public function hook_sitemapIndexPage(&$args) {
        // Hook for sitemap page indexer
    }

    public function hook_sitemapIndexLink(&$args) {
        // Hook for sitemap link indexer
    }

    // ------------------------------------------------------------------------

    public function hook_sitemapSetup(&$args, $obj) {
        // Hook for sitemap setup
    }

    public function hook_sitemapTextOutput(&$args, $obj) {
        // Hook for xml text output
    }

    public function hook_sitemapXmlIndexOutput(&$args, $obj) {
        // Hook for xml index-page output
    }

    public function hook_sitemapXmlIndexSitemapList(&$args, $obj) {
        // Hook for manipulation sitemap.xml index page sitemap list
    }

    public function hook_sitemapXmlPageOutput(&$args, $obj) {
        // Hook for xml page output
    }

    public function hook_sitemapClear(&$args, $obj) {
        // Hook for sitemap clearing (truncating via clear-cache hook)
    }

    // ------------------------------------------------------------------------

    public function hook_robotsTxtMarker(&$args, $obj) {
        // Hook for robots.txt marker list
    }

    public function hook_robotsTxtOutput(&$args, $obj) {
        // Hook for robots.txt output
    }

    // ------------------------------------------------------------------------

    public function hook_httpHeaderOutput($args, $obj) {
        // Hook for http header output
    }

    // ------------------------------------------------------------------------
}