typo3-seo

from dirnbauer/webconsulting-skills

AI-augmented development environment with Agent Skills for enterprise TYPO3 projects (Cursor IDE)

3 stars0 forksUpdated Jan 26, 2026
npx skills add https://github.com/dirnbauer/webconsulting-skills --skill typo3-seo

SKILL.md

TYPO3 SEO Configuration

Compatibility: TYPO3 v13.x and v14.x (v14 preferred) All SEO configurations in this skill work on both v13 and v14.

1. Core SEO Extension Setup

Installation

ddev composer require typo3/cms-seo
ddev typo3 extension:activate seo
ddev typo3 cache:flush

Page Properties SEO Tab

After installation, pages have an "SEO" tab with:

  • seo_title - Override page title for search engines
  • description - Meta description
  • og_title, og_description, og_image - Open Graph
  • twitter_title, twitter_description, twitter_image - Twitter Cards
  • canonical_link - Canonical URL override
  • no_index, no_follow - Robot directives

2. Meta Tags Configuration

TypoScript Setup (v13/v14)

page {
    meta {
        # Basic meta tags
        viewport = width=device-width, initial-scale=1
        robots = index,follow
        author = webconsulting
        
        # Open Graph (auto-filled by EXT:seo if page properties set)
        og:type = website
        og:site_name = {$site.name}
        og:locale = de_AT
        
        # Twitter Cards
        twitter:card = summary_large_image
        twitter:site = @webconsulting
    }
}

Dynamic Meta Description

page.meta.description = TEXT
page.meta.description {
    # Fallback chain: page description > parent description > site description
    data = page:description // levelfield:-1,description,slide // {$site.description}
    htmlSpecialChars = 1
}

Hreflang Tags (Multi-Language)

EXT:seo automatically generates hreflang tags based on site configuration:

# config/sites/main/config.yaml
languages:
  - languageId: 0
    locale: de_AT
    hreflang: de-AT
    title: Deutsch
    
  - languageId: 1
    locale: en_GB
    hreflang: en-GB
    title: English

3. XML Sitemap Configuration

Basic Sitemap Setup

# config/sites/main/config.yaml
base: 'https://example.com/'
routeEnhancers:
  PageTypeSuffix:
    type: PageType
    map:
      sitemap.xml: 1533906435

TypoScript Sitemap Configuration (v13/v14)

plugin.tx_seo {
    config {
        xmlSitemap {
            sitemaps {
                # Pages sitemap (default)
                pages {
                    provider = TYPO3\CMS\Seo\XmlSitemap\PagesXmlSitemapDataProvider
                    config {
                        excludedDoktypes = 3,4,6,7,199,254,255
                        additionalWhere = no_index = 0 AND nav_hide = 0
                    }
                }
                
                # News sitemap (example for EXT:news)
                news {
                    provider = GeorgRinger\News\Seo\NewsXmlSitemapDataProvider
                    config {
                        table = tx_news_domain_model_news
                        sortField = datetime
                        lastModifiedField = tstamp
                        changeFreqField = sitemap_changefreq
                        priorityField = sitemap_priority
                        additionalWhere = {#hidden} = 0 AND {#deleted} = 0
                        pid = 123
                        url {
                            pageId = 45
                            fieldToParameterMap {
                                uid = tx_news_pi1[news]
                            }
                        }
                    }
                }
                
                # Products sitemap (custom extension)
                products {
                    provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
                    config {
                        table = tx_shop_domain_model_product
                        sortField = title
                        lastModifiedField = tstamp
                        pid = 100
                        recursive = 2
                        url {
                            pageId = 50
                            fieldToParameterMap {
                                uid = tx_shop_pi1[product]
                            }
                            additionalGetParameters {
                                tx_shop_pi1.controller = Product
                                tx_shop_pi1.action = show
                            }
                        }
                    }
                }
            }
        }
    }
}

Sitemap Index

Access sitemap at: https://example.com/sitemap.xml

Individual sitemaps:

  • https://example.com/sitemap.xml?sitemap=pages
  • https://example.com/sitemap.xml?sitemap=news

4. Robots.txt Configuration

Static Robots.txt

# public/robots.txt
User-agent: *
Allow: /

# Disallow TYPO3 backend and system directories
Disallow: /typo3/
Disallow: /typo3conf/
Disallow: /typo3temp/

# Sitemap location
Sitemap: https://example.com/sitemap.xml

Dynamic Robots.txt via TypoScript

# Generate robots.txt dynamically
robotstxt = PAGE
robotstxt {
    typeNum = 9999
    config {
     

...
Read full content

Repository Stats

Stars3
Forks0