clickstorm logo

SEO

Classification

cs_seo

Version

main

Language

en

Description

Enable SEO features on pages and models

Keywords

seo,meta,tags,google,open,graph,facebook,twitter,cards,href,lang,index,search,engine

Copyright

2016

Author

Pascale Beier, Angela Dudtkowski, Marc Hirdes, Andreas Kirilow

Email

hirdes@clickstorm.de

License

This document is published under the Open Content License available from http://www.opencontent.org/opl.shtml

Rendered

Tue, 20 May 2025 07:00:37 +0000

The content of this document is related to TYPO3, a GNU/GPL CMS/Framework available from www.typo3.org.

Table of Contents

Introduction

What does it do?

Clickstorm SEO enables important on-page features for search engine optimization (SEO) and expands the page settings and extbase models e.g. with a preview for google search results.

Features

  • Advanced page settings
    • Preview for search results on Google (SERP)
    • Focus Keyword
    • Structured Data (JSON-LD)
  • Easily extend any database record you like with this SEO properties (news, events etc.)
  • On-page evaluation of different SEO aspects (focus keyword, alt attributes, heading order etc.) and records (pages, news etc.)
  • href="lang" support for extensions
  • allow all languages for the x-default attribute
  • Define fallback images for Open Graph and Twitter Cards
  • Backend module in AngularJS to edit the properties directly
  • Another backend module to fill empty alternative text of images

Screenshots

Here you can take a look at the advanced page configurations.

cs_seo SEO tab

Evaluate the On-page SEO of the current page you see in the backend. Try to reach 100/100.

cs_seo On-page evaluation in TYPO3

The backend module gives you an overview and the option to change page properties directly.

cs_seo backend module

Extend e.g. the news with SEO properties. So in the detail view, they are automatically shown.

cs_seo extend news

Evaluate this records.

cs_seo record evaluation

For example, check that the hierarchical order of headings is correct.

cs_seo evalutaion heading order

Add alternative text to your images.

cs_seo module to fill alternative texts of images

Add Structured Data (JSON-LD) to pages and records incl. check for the current URL or markup.

cs_seo Structured Data (JSON-LD) field including checks for URL and text

Users Manual

With this extension editors can easily set some advanced properties for SEO in the page settings. With the Google search result preview the editor can see the effects of some properties directly.

We also change the max characters settings in some fields so that they are not too long for search results. Furthermore the new configurations are good explained. You can see the explanation as usual by hovering the label.

Page Properties

Property Label Tab Type
tx\_csseo\_title\_only Title only SEO boolean
tx\_csseo\_keyword Focus Keyword SEO string
tx\_csseo\_tw\_creator Twitter Creator Social Media string
tx\_csseo\_tw\_site Twitter Site Social Media string
tx\_csseo\_json\_ld Structured Data (JSON-LD) Metadata string

Property details

Title only

Property
tx_csseo_title_only
Data type
boolean
Description
Show the browser title without the site title in case the space isn't enough.

Focus Keyword

Property
tx_csseo_keyword
Data type
string
Description
Specify a word or phrase. In the SEO evaluation will be proofed wether this Focus Keyword is set in the browser title, the meta description and in the page content. You can specify multiple, comma-separated alternatives, e.g. for plural or stop words.

Twitter Creator

Property
tx_csseo_tw_creator
Data type
string
Description
Enter a twitter username without the @ sign. If the user shares the page on twitter, this account will be shown as creator.

Twitter Site

Property
tx_csseo_tw_site
Data type
string
Description
Enter a twitter username without the @ sign. If the user shares the page on twitter, this account will be used in the card footer. The account should belong to your website.

Structured Data (JSON-LD)

Property
tx_csseo_json_ld
Data type
string
Description
Add more information about the content of the current page with JSON-LD. More information

FAQ

Do I have to insert open graph and twitter cards properties always? The title, description and an image should be available on every page. The title is default given by the page title. You can set the description in the SEO tab. A default image for sharing can be set by the open graph image field in the Social Media tab.

Installation

To install the extension, perform the following steps:

  1. Download and install the extension via Extension Manager or Composer
  2. Include the TypoScript from the extension! This is shown in the screenshot below.
  3. Make some initial configurations, see Configuration.
  4. Run the Scheduler Task to evaluate all pages initially, see Evaluation.
  5. Take a look to Trouble shooting.
Extension settings

!If you forgot to include the TypoScript, you will get an error if you open the page settings!

Migration

If you had already installed an extension for SEO (metaseo or seo_basics) you can migrate properties like the browser title or the canonical URL. Therefor you have to install cs_seo < 5.0 and run the update script.

Configure the extension or run the update script

After that you can delete the other SEO extension and update your database.

Page properties in TYPO3 v9

If you use TYPO3 v8 and want to update to TYPO3 v9 or higher, please use cs_seo version 4, to migrate the page properties from cs_seo to core, e.g 'tx_csseo_title' to 'seo_title'.

From older versions

Please take a look at our ChangeLog.

Extension Manager Configuration

In the extension manager you can make some configurations.

Include the TypoScript from cs_seo

Properties

Page configurations

In this section we provide default settings for maximum characters of the meta data which were recommended. The recommendation is the result of a research by ourself. So if you don't agree with them, you can override them here.

Max characters of title

Property
maxTitle
Data type
integer
Description
The recommended maximum number of characters for the meta title tag.

Max characters of description

Property
maxDescription
Data type
integer
Description
The recommended maximum number of characters for the meta description tag.

Crop description

Property
cropDescription
Data type
boolean
Description
Crop description for extended tables, if it exceeds "Max characters of description".

Max characters of nav title

Property
maxNavTitle
Data type
integer
Description
The recommended maximum number of characters for the nav title and URL.

Show Descriptions in TCA

Property
showDescriptionsInTCA
Data type
boolean
Description
Display the cs_seo descriptions for SEO fields in pages TCA. The descriptions will be shown below the labels in the TYPO3 backend. They help editors to understand the several fields.

Evaluation

Show evaluation in the page module

Property
inPageModule
Data type
integer
Description
Show the dialog of the evaluation in the page module. (0: In the head of the page module, 1: in the footer, 2: none). The Evaluation can also be disabled via TSconfig: mod.web_layout.tx_csseo.disable = 1.

Doktypes

Property
evaluationDoktypes
Data type
string
Description
Comma separated list of allowed page doktypes for the evaluation. This doktypes must be callable in the frontend!

Evaluators

Property
evaluators
Data type
string
Description
Comma separated list of the evaluators which should analyse the page. You can also add your own evaluators or change the sorting.

Min characters of an optimal title

Property
minTitle
Data type
integer
Description
The recommended minimum number of characters for the meta title tag. Only used for evaluation.

Min characters of an optimal description

Property
minDescription
Data type
integer
Description
The recommended minimum number of characters for the meta description tag. Only used for evaluation.

Force the min length in TCA

Property
forceMinDescription
Data type
integer
Description
If true, the editor can only save the description if the minimum length is reached.

Max number of h2 headlines in one page

Property
maxH2
Data type
integer
Description
Determine how many headings h2 are allowed. Only used for evaluation.

Please take also a look at the next chapter for TypoScript configurations.

File configurations

File Columns

Property
modFileColumns
Data type
string
Description
Comma separated list of additional sys_file_metadata columns to show in the file module.

Exclude File Extensions

Property
excludeFileExtensions
Data type
string
Description
Comma separated list of file extensions which should not be displayed in the file module.

Site Configuration

In the site configuration you can set the following options.

Properties

Property Data type Default
language.txCsseoXdefault integer 0

Language configurations

x-default

Property
txCsseoXdefault
Data type
integer
Description
Signal for search engines to use this language if no other is better suited.
If you want to have another language as the default you can change this here.
Important! If the x-default is not the default language, cs_seo will generate the canonicals and hreflang for pages and adds only specified parameters.

Trouble shooting

I get an error when I edit a page. What should I do?

Please include the TypoScript from the extension in your root ts.

There is no domain displayed in the google preview. What should I do?

Please add a Site Configuration for your root page.

I can't find a robots meta tag with index,follow. Is this a bug?

Not at all. index,follow is the default setting. So if no robot tag is specified, the crawler has no restrictions for indexing. More information you'll get by Google.

.htaccess disallow frontend access. There are no evaluation results. What should I do?

Give your server access to the frontend. Include the following line in your .htaccess file and replace the x with the IP from the server.

Order allow,deny
Allow from xxx.xxx.xxx.xxx
Copied!

You could also use the domain instead of the IP.

Allow from .mydomian.com
Copied!

In my setup I need specific options to handle the evaluation request. How can I solve this?

All requests from cs_seo get a specific request header "X-CS-SEO". So you can specify your own handles, e.g. in your .htacces file.

RewriteCond %{REQUEST_URI} ^/en [NC]
RewriteCond %{HTTP:X-CS-SEO} !^1$
RewriteRule ^(.*)$ https://en.example.org/$1 [L,R=301]
Copied!

Every browser title has a pipe symbol | at the end. How can I remove this?

Usually we display after this symbol the title of your whole site. You can set the title in your TypoScript Template record or via TypoScript

plugin.tx_csseo.sitetitle = my site title
Copied!

You can also change or remove the symbol via TypoScript, see also TSREF

config.pageTitleSeparator =
Copied!

Configuration

Here you find information for integrators, e.g how to set up the hreflang.

Main Topics

Meta tags

The meta tags were automatically inserted from the page settings. Fallback for the social meta tags are already defined - FAQ.

Browser title prefix/suffix

Generally the sitetitle is defined in the TypoScript Root Template. This is the prefix/suffix for the browser title. If you wan't to have a specific phrase for each language, look here sitetitle.

Extend news and other extension records

It is possible to extend other records like pages with seo properties. If this is done, the meta tag genaration will override the page meta tags, if the parameter for the detail view was found in the URL. More information here: Extend existing models.

Evaluation

All constants for the evaluation, like the minimum length of an description and so on are configurable in the extension manager (Extension Manager Configuration). Some max values were also used to define the max number of characters in the TCA. You can also define if the evaluation should be visible in the page module and at which position. You can say, which evaluators are available and you can write your own ones (Write your own evaluators).

If you want to hide the evalutation for some editors or pages, you can use TSconfig.

# user TSconfig
page.mod.web_layout.tx_csseo.disable = 0

# page TSconfig
mod.web_layout.tx_csseo.disable = 0
Copied!

Robots.txt

Use the static routes, to configure your robots.txt, see TYPO3 CMS Core ChangeLog.

TypoScript Settings Reference

Language

To set the href-lang keys etc. use the Site Configuration.

Social

Properties

Property Data type stdWrap Default
social.twitter.creator string no  
social.twitter.site string no  

plugin.tx_csseo.social.

Twitter Creator

Property
twitter.creator
Data type
string
Description
Default twitter account as creator (without @)

Twitter Site

Property
twitter.site
Data type
string
Description
Default twitter account as site (without @)

Extend existing models

To extend an already existing extbase model with a detail view, e.g. news or job offers, and offer the evaluation of this records, easily complete the following two steps.

If the hreflang tag is enabled in TypoScript, the hreflang tag is set for all existing languages of the extended extbase item (not for the languages of the detail page). It checks the languages for the extbase item, which is given by the get parameter from the page Yaml config in step 2. If a fallback item is displayed because of sys_language_mode content_fallback, the hrefang tag will be removed and the canonical tag points to the url of the displayed fallback item.

1. Add a Yaml Config File

Add the following yaml content to a file EXT:myext/Configuration/CsSeo/config.yaml.

records:

   # new index and table name of the model
   tx_myext_domain_model_mymod:

      # if the get parameter is set in the URL the cs_seo properties will be shown
      enable: 'GP:tx_myext_pi1|mymod'

      # if the model already has fields like title etc. define them as fallback
      fallback:

         # cs_seo title field fallback = mymod title field
         title: title

         # cs_seo description field fallback = mymod description field
         # you can use double slashes for multiple fallback options, e.g. 'teaser // abstract'
         # in this case the first field with content will be used
         # also more fields possible within curly brackets, e.g. description: {teaser} - {company}
         description: description

      # enable evaluation for mymod
      evaluation:

         # additional params to initialize the detail view, the pipe will be replaced by the uid
         getParams: >-
            &tx_myext_pi1[controller]=MyController&tx_myext_pi1[action]=MyAction&tx_myext_pi1[mymod]=|

         # detail pid for the current records, only if set the table will be available
         detailPid: 100
Copied!

You have the possibility to merge multiple config files via imports.

If you need another detail pid, for example for different storage pids, you can use the PSR-14 event \Clickstorm\CsSeo\Event\ModifyEvaluationPidEvent. Furthermore you can also use environment variables for different pids in different environments like staging or production.

detailPid: '%env(TYPO3__TX_NEWS__PID_DETAIL)%'
Copied!

You may take also a look at the dotenv-connector.

2. Register the config file

Register the config file in your ext_localconf.php.

// Copy the current file
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['cs_seo']['yamlConfigFile'] = 'EXT:myext/Configuration/CsSeo/config.yaml';
Copied!

Clear the system cache and done. A new tab is in the backend visible called SEO.

3. Update the database

You need to update the database in install tool afterwards. We will automatically insert the following SQL.

CREATE TABLE tx_myext_domain_model_mymod (
	tx_csseo int(11) DEFAULT '0' NOT NULL
);
Copied!

Write your own evaluators

In the extension manager you can define which evaluators should be available on the current page. If you like to, you can also add your own analysis scripts and show the results in the backend.

1. Create a new evaluator

<?php
namespace Vendor\ExtensionName\Evaluation;

use Clickstorm\CsSeo\Evaluation\AbstractEvaluator;

class MyEvaluator extends AbstractEvaluator
{

	public function evaluate() {
		$state = self::STATE_RED;

		$count = $this->domDocument->getElementsByTagName('h1')->length;

		if($count > 0 && $count < 2) {
			$state =  self::STATE_GREEN;
		}

		return [
			'count' => $count,
			'state' => $state
		];
	}

}
Copied!

The class must extend the AbstractEvaluator class. You get the current domDocument with $this->domDocument. You must return an arry that contains at least the key state. This is important for the final percentage calculation.

2. Register the evaluator

Add the following configurition in your ext_localconf.php.

$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['cs_seo']['evaluators']['My'] =
	\Vendor\ExtensionName\Evaluation\MyEvaluator::class;
Copied!

The key is important. In the results the partial with the path Results\My will be called for the output.

3. Create a partial and add the partialRootPaths

module.tx_csseo.view.partialRootPaths.10 = EXT:my_ext/Resources/Private/Partials
Copied!

In the partial folder create a folder called Results. In this folder insert your partial file My.html.

<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
      xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
<body>
<f:section name="Main">
	<li class="cs-icon csseo-icon-state-{result.state}">
		<b><f:translate key="evaluation.my" extensionName="my_extension" /></b> <f:translate key="evaluation.my.{result.state}" arguments="{0: result.count}" extensionName="my_extension" />.
	</li>
</f:section>
</body>
Copied!

4. Add the evaluator in the extension manager settings

Add the evaluator in the extension manager to the available evaluators, e.g. H1,H2,My. The key equals the key in the array where you registered the evaulator.

Override Meta Tags

As in TYPO3 v9 LTS recommended, we use the MetaTag Api to add our Meta Tags. You can override them easily. Take a look at the TYPO3 Core API.

Furthermore we provide hooks to override the hreflang and canocial tags.

Known Problems

None so far. If you've found some, visit TYPO3 Forge or report the issue on GitHub.

If you have further questions, please use our contact page or use the Slack channel #ext-cs_seo.

You can also test the current developer version from GitHub.

To-Do list

If you have some feature wishes, please contact us or visit TYPO3 Forge.

Some considerations

  • More hints while typing the title or description (like min characters, words etc.)

Evaluation

To evaluate muliple items at oncec hoose the Extbase-CommandController-Task (extbase) and then the task CsSeo Evaluation: update. Save and run the task.

Properties

Property Data type Default
evaluation.uid integer 0
evaluation.tableName integer pages

Basic configurations

uid

Property
Uid
Data type
integer
Description
If you want to evaluate only a sinlge item, then enter here the uid. Otherwise all not deleted and disabled items will be analysed.

table name

Property
tableName
Data type
string
Description
Enter a table name if you want to evaluate another table then pages. Localizations e.g. page_language_overlay will be fetched automatically.