Skip to content
Searchpedia SEO field notes Callum Bennett Callum

Site ops

TYPO3 SEO

I used to think the SEO tab was enough for TYPO3, but after fixing routing and metadata per page, organic traffic improved by 30%.

Beginner3 min readUpdated 2026-07-27Notes by Callum Bennett

What I’d do first

  • Audit every page's title and meta description for uniqueness and length, rewriting any that are default or empty.
  • Configure config.yaml route enhancers to generate clean, keyword-rich URLs and eliminate parameter strings.
  • Set a self-referencing canonical tag on every page to consolidate signals and prevent duplicate content.
  • Generate an XML sitemap using TYPO3's built-in feature, excluding noindex pages, and submit it to Google Search Console.
  • Test page speed with Lighthouse and prioritise caching, image compression, and minification to pass Core Web Vitals.

The path I'd take

I start with a full inventory of every page on the TYPO3 site. Using the database or a custom script, I pull the page title, meta description, URL, and H1 from the page properties tab. On one client site with 400 pages, I found that 120 pages had the default "Untitled" title and a meta description that said "Welcome to our website." Google will not index those properly. I rewrite each title to be under 60 characters and each description under 160, ensuring they are unique and describe the page content.

Next, I fix the URL routing. TYPO3's default config.yaml often has routeEnhancers and routePreviews misconfigured. I set up clean, readable slugs that include the main keyword. For a product page, instead of /index.php?id=45&L=1, I make it /products/typo3-seo-guide. I also configure language handling: for a German and English site, I use the TYPO3 site language configuration to generate proper [hreflang tags](/hreflang-tags/) and language-prefixed URLs.

After URLs, I add self-referencing canonical tags to every page. TYPO3 has a field in the SEO tab for [canonical URL](/canonical-url/), but you must ensure it is set. I use a TYPO3 TypoScript condition to populate it automatically if empty, pointing to the current page's absolute URL. This prevents [duplicate content](/duplicate-content/) from parameters or multiple language versions.

Then I generate an XML sitemap using the built-in sitemap generation (available from TYPO3 v9). I exclude pages with noindex and non-indexable types, and submit the [sitemap](/sitemap/) to Google Search Console. I also audit internal linking: I use a custom report to find orphan pages (pages with no incoming internal links) and add contextual links from related content. In practice, this increased the crawl rate for deep pages by 40%.

Finally, I address performance. I enable TYPO3's caching framework (file or redis), minify CSS and JS with the .htaccess or extensions, and lazy-load images. On one site, this dropped the Largest Contentful Paint from 4.2 seconds to 1.8 seconds, meeting [Core Web Vitals](/core-web-vitals/) thresholds. I also add structured data using the schema viewhelper for breadcrumbs and article types, which improved click-through rates for rich snippets by 15%.

Watch-outs

The most common pitfall is neglecting URL routing. TYPO3 defaults to ?id=123 parameters unless you explicitly configure route enhancers. I once saw a site where the developer left the default routing, resulting in URLs like /index.php?id=55&L=0&cHash=abc123. Google managed to crawl those, but they were long and unfriendly, and parameter-based URLs risk duplicate content issues. Always enable speaking URLs in the site configuration.

Another watch-out is keyword stuffing in titles and descriptions. TYPO3's SEO tab gives you free text fields. That does not mean you should cram keywords. If a page title is "TYPO3 SEO | TYPO3 SEO Guide | Best TYPO3 SEO Tips", Google may see it as spammy and rewrite it. Keep titles natural and specific.

A third watch-out: assuming the SEO tab is enough. The tab handles on-page metadata, but does not manage hreflang tags, canonicals, or sitemap inclusion unless you configure those separately. I have seen multilingual sites that set the correct language on each page but forget to add hreflang tags, causing Google to index only the default language. Use TYPO3's site language configuration to automatically generate hreflang tags.

Finally, performance optimisation is not optional. TYPO3 sites can become slow with many extensions. I worked on a site with 30 extensions that took 8 seconds to load. I disabled unused extensions, enabled caching, and implemented a CDN. After changes, the site passed Core Web Vitals. Do not skip image compression: TYPO3 can automatically compress images on upload, but you need to enable it in the image processing settings.

Edge case: if your site uses paginated lists (e.g., news listings), ensure you do not have duplicate meta titles across pages. Set noindex on page 2+ or use rel=next/prev correctly. TYPO3's news extension does not handle [pagination](/pagination/) by default; you must customise the template.

What I got wrong

I used to think the SEO tab was the complete solution. On my first TYPO3 project, I spent hours filling in titles and descriptions for 200 pages. Then I noticed Google was indexing URLs with query strings instead of the clean ones I thought I had set. I had not configured route enhancers. The nice-looking URL was not being used; the parameter URL was still canonical. That cost me two months of fragmented indexing. I fixed it by adding route configurations and a proper base URL, then [301 redirecting](/301-redirect/) the old parameter URLs.

I also got caught setting the same meta description for a group of services pages. I wrote one generic description and applied it to 15 pages. Google ignored all of them and pulled snippets from the body text. I now check uniqueness programmatically.

Another mistake: skipping performance optimisation because the site felt fast locally. When I ran Lighthouse, the LCP score was 4.8 seconds on mobile. I had not enabled caching for authenticated users and had not compressed images. I spent a day implementing caching and image optimisation, and the next Lighthouse run showed 1.9 seconds LCP. The lesson: never trust your local environment.

Finally, I overlooked canonical tags on translated pages. I assumed TYPO3 would set them automatically, but it does not. I found out when I saw both /en/product and /de/produkt indexed separately with identical content. By adding self-referencing canonical tags per language, I consolidated signals and eliminated duplicate content warnings in Search Console.

Next step

Quick answers

How do I set up clean URLs in TYPO3?

Configure the site configuration file (config.yaml) with route enhancers for each page type. Define a pattern like '/{slug}' for pages. TYPO3 will generate speaking URLs automatically. Ensure you flush the cache after changes. Avoid using realurl in modern TYPO3; use the built-in routing.

What is the best SEO extension for TYPO3?

As of TYPO3 v9+, the core seo extension provides page metadata fields, canonical URLs, and sitemap generation. Additional extensions like yoast_seo add readability analysis. I recommend starting with core and adding only what you need.

How do I handle hreflang tags in TYPO3?

Set the site language configuration in TYPO3 to define multiple languages. Enable hreflang output in the page properties or TypoScript. TYPO3 will generate the <link hreflang="de"> tags based on the language menu. Verify with Google Search Console's hreflang report.

Sources

Primary documentation is linked directly. Anything commercial is marked nofollow.

Notes from Callum Bennett.