typo3-seo について
開発者やサイト管理者向けの TYPO3 v14 SEO 設定スキルです。TYPO3 API と標準的な慣例に沿って、基本設定のほか、メタデータ、多言語タグ、サイトマップ、robots.txt、正規 URL の設定方法を説明します。
主な機能
- 01TYPO3 SEO 拡張のセットアップ
- 02メタデータとソーシャルタグの設定
- 03多言語 hreflang タグの生成
- 04XML サイトマップと robots.txt の設定
- 05正規 URL の管理
活用シーン
- 01TYPO3 ページへの SEO フィールド追加
- 02検索やソーシャル共有用メタデータの設定
- 03サイトマップと robots.txt のルート設定
- 04サイトバリアント間の正規 URL の処理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dirnbauer/ webconsulting-skills --skill typo3-seoインストール後、Claude Code で/typo3-seoを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/06-structured-data-json-ld.md07-performance-seo.md08-seo-checklist.md09-seo-extensions-typo3-v14.md10-monitoring-and-analytics.mdappendix.mdfull-guide.mdv14-notes.md詳細
TYPO3 SEO 設定
互換性: TYPO3 v14.x このスキルのすべての SEO 設定は TYPO3 v14 で動作します。
TYPO3 API を最優先: カスタム実装を作成する前に、必ず TYPO3 の組み込み API、コア機能、確立された規約を使用してください。TYPO3 がすでに提供している機能を再実装しないでください。使用する API やメソッドが TYPO3 v14 に存在し、非推奨になっていないことを、必ず TYPO3 の公式ドキュメントで確認してください。
1. コア SEO 拡張機能のセットアップ
インストール
ddev composer require typo3/cms-seo
ddev typo3 extension:setup -e seo
ddev typo3 cache:flush
ページプロパティの SEO タブ
インストール後、ページに「SEO」タブが追加されます。
seo_title- 検索エンジン向けのページタイトルを上書きしますdescription- メタディスクリプションog_title、og_description、og_image- Open Graphtwitter_title、twitter_description、twitter_image- Twitter Cardscanonical_link- canonical URL の上書きno_index、no_follow- ロボット向けディレクティブ
2. メタタグの設定
TypoScript のセットアップ(TYPO3 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
# Recommended social image: 1200×630 px; add og:image:width / og:image:height when known for faster previews
# Twitter Cards
twitter:card = summary_large_image
twitter:site = @webconsulting
}
}
動的なメタディスクリプション
page.meta.description = TEXT
page.meta.description {
# Page description, then slide rootline; add further fallbacks via stdWrap.if / constants (do not use {$...} inside `data` as a getText key)
data = page:description
ifEmpty.data = levelfield:-1,description,slide
htmlSpecialChars = 1
}
Hreflang タグ(多言語)
EXT:seo はサイト設定に基づいて hreflang タグを自動生成します。
# 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
国際 SEO をターゲットにする場合は、サイト設定に x-default hreflang(多くの場合、主要市場の言語)を追加してください。EXT:seo は languages エントリーからタグを出力します。
3. XML サイトマップの設定
基本的なサイトマップのセットアップ
# config/sites/main/config.yaml
base: 'https://example.com/'
routeEnhancers:
PageTypeSuffix:
type: PageType
map:
sitemap.xml: 1533906435
TypoScript によるサイトマップの設定(TYPO3 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
additionalWhere = {#no_index} = 0 AND {#canonical_link} = ''
}
}
# 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
# Google largely ignores changefreq/priority — keep for other crawlers; focus on accurate lastmod
additionalWhere = {#hidden} = 0 AND {#deleted} = 0
pid = 123
url {
pageId = 45
fieldToParameterMap {
uid = tx_news_pi1[news]
}
additionalGetParameters {
tx_news_pi1.controller = News
tx_news_pi1.action = detail
}
# Match this with a News route enhancer that maps the namespaced tx_news_pi1 arguments.
# Example:
# routeEnhancers:
# NewsPlugin:
# type: Extbase
# extension: News
# plugin: Pi1
# routes:
# - routePath: '/{news-title}'
# _controller: 'News::detail'
# _arguments:
# news-title: 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
}
}
}
}
}
}
}
}
サイトマップインデックス
サイトマップには https://example.com/sitemap.xml でアクセスします。
ルートエンハンサーがない場合、通常、基盤となるページタイプは ?type=1533906435 でリクエストされます。子サイトマップの正確な URL は、TYPO3 がサイトマップインデックスから生成します。ルーティングで明示的にマッピングしていない限り、?sitemap=... の URL をハードコードしないでください。
TYPO3 v14: Breaking #104422 により、サイトマップの GET パラメーターは
tx_seo[sitemap]およびtx_seo[page]として名前空間化されています。上記のPageTypeSuffixエンハンサーがマッピングするのは、サイトマップのページタイプのみです。コアでは、サイトマップインデックスのページネーションはデフォルトでクエリパラメーターのままです。見やすい子 URL 用のカスタムルートエンハンサーは任意であり、適切なaspectsを定義し、コアと競合するエンハンサーキーを避ける必要があります。
# Optional — NOT shipped by Core; tune routePath + aspects + mappers to your real sitemap segments.
CustomSitemapPagination:
type: Simple
routePath: 'sitemap/{sitemap}/{page}'
aspects:
sitemap:
type: StaticRangeMapper
start: '0'
end: '99'
page:
type: StaticRangeMapper
start: '0'
end: '999'
defaults:
page: '0'
_arguments:
sitemap: 'tx_seo/sitemap'
page: 'tx_seo/page'
同じパターンの使用例については、references/v14-notes.md を参照してください。
このエンハンサーは任意のカスタム設定です。コアは
tx_seo/sitemapをマッピングしますが、設計上、ページネーションはクエリパラメーターのままです。追加後は十分にテストしてください。
ページネーションとルートエンハンサー: コアは
sitemap.xmlを SEO ページタイプにマッピングします。設計上、サイトマップインデックスのページネーションはクエリパラメーターのままです(コアにはtx_seo/page用の見やすい URL エンハンサーが用意されていません)。CustomSitemapPaginationのようなカスタムエンハンサーは任意であり、適切なaspectsを定義する必要があります。例をコアのデフォルト設定として扱わないでください。
4. Robots.txt の設定
静的な 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
TypoScript による動的な Robots.txt
# Generate robots.txt dynamically
robotstxt = PAGE
robotstxt {
typeNum = 9999
config {
disableAllHeaderCode = 1
additionalHeaders.10.header = Content-Type: text/plain; charset=utf-8
}
10 = TEXT
10.value (
User-agent: *
Allow: /
Disallow: /typo3/
Disallow: /typo3conf/
Disallow: /typo3temp/
Sitemap: https://example.com/sitemap.xml
)
# For a dynamic base URL, derive it from site `base` (YAML), a TypoScript constant, or
# a small data processor — `TEXT.value` does not interpolate `{getEnv:...}` getText.
}
ルートエンハンスメント:
# config/sites/main/config.yaml
routeEnhancers:
PageTypeSuffix:
type: PageType
map:
robots.txt: 9999
5. Canonical URL
自動 canonical
EXT:seo は canonical タグを自動生成します。サイトで設定してください。
# config/sites/main/config.yaml
base: 'https://example.com/'
baseVariants:
- base: 'https://staging.example.com/'
condition: 'applicationContext == "Development"'
Canonical の手動上書き
ページプロパティの SEO タブで、「Canonical URL」フィールドを設定します。
TypoScript を使用する場合:
page.headerData.100 = TEXT
page.headerData.100 {
value = <link rel="canonical" href="https://example.com/specific-page" />
}
詳細リファレンス
詳細な例、長いテンプレート、トラブルシューティング用マトリックス、付録、または上記に含まれていないセクションが必要なタスクでは、完全ガイドをお読みください。対象範囲の狭いタスクでは、このファイルを読み込まず、スキルが段階的開示に従うようにしてください。