公開サイト・SEO
SEO・アナリティクス設定
概要
CastMatrix に組み込まれている SEO 関連の機能一覧です。
| 機能 | 状態 | 設定場所 |
|---|---|---|
| Google Analytics(GA4) | ✅ 実装済み | 管理画面 → サイト設定 |
| ページタイトル | ✅ 自動生成 | 管理画面 → 店舗基本情報(shop_name) |
| メタディスクリプション | ✅ 部分実装 | キャッチフレーズ欄 |
| OGP / SNS カード | ✅ 実装済み | 自動(キャスト詳細は動的) |
| canonical URL | ✅ 実装済み | 自動(全ページ) |
| sitemap.xml | ✅ 実装済み | /sitemap.xml(動的生成) |
| robots.txt | ✅ 実装済み | /robots.txt(動的生成) |
| noIndex 制御 | ✅ 実装済み | 対象ページに自動付与 |
1. Google Analytics(GA4)の設定
設定方法
管理画面 → サイト設定(/cmm/settings/site)→「Google Analytics ID」欄に測定 ID を入力して保存します。
G-XXXXXXXXXX
GA4 の測定 ID は Google アナリティクス → 管理 → データストリーム → ウェブストリームの詳細で確認できます。
動作
- 管理画面に ID を登録すると、公開サイトの全ページに
gtag.jsスクリプトが自動挿入されます。 - コードの変更・再デプロイは不要です。ID を空欄に戻すとスクリプト挿入が停止します。
2. ページタイトル(<title>)
各ページのタイトルは次のルールで自動生成されます。
| ページ | タイトル形式 |
|---|---|
トップ(/home) |
{shop_name} |
キャスト一覧(/casts) |
キャスト一覧 | {shop_name} |
キャスト詳細(/casts/:id) |
{キャスト名} | {shop_name} |
出勤表(/schedule) |
出勤スケジュール | {shop_name} |
ランキング(/ranking) |
人気ランキング | {shop_name} |
クーポン(/coupon) |
クーポン・バナー | {shop_name} |
料金・案内(/system) |
料金・システム | {shop_name} |
求人(/recruit/*) |
求人タイトル | {shop_name} |
フリーページ(/pages/:slug) |
{ページタイトル} | {shop_name} |
お気に入り(/favorites) |
お気に入り(noindex) |
shop_name は管理画面 → 店舗基本情報(/cmm/settings/shop)で設定します。
→ 09-shop-and-recruit.md(購入後 ZIP 同梱)
3. メタディスクリプション(<meta name="description">)
| ページ | ディスクリプション |
|---|---|
トップ(/home) |
shop.catchphrase(Site_Settings の catchphrase キー) |
キャスト詳細(/casts/:id) |
キャストの catchphrase(キャスト編集画面で設定) |
| その他のページ | 設定なし(クローラーが本文から自動生成) |
4. OGP(Open Graph Protocol)/ SNS シェア
SNS(X/Twitter・LINE・Facebook 等)でシェアされたときのカード表示です。
全ページ共通
| タグ | 値 |
|---|---|
og:title |
ページタイトル |
og:description |
メタディスクリプション(設定されている場合) |
og:type |
website |
twitter:card |
summary_large_image |
キャスト詳細(/casts/:id)のみ追加
| タグ | 値 |
|---|---|
og:url |
ページの完全 URL(例: https://shop.example.com/casts/1) |
og:image |
キャストのメイン画像 URL(R2 または CF Images) |
キャスト詳細ページは SSR のため、SNS がページを取得した際にキャストの最新情報が反映されます。
OGP 画像の推奨仕様
| 項目 | 推奨値 |
|---|---|
| サイズ | 1200 × 630 px |
| アスペクト比 | 1.91:1 |
| 形式 | JPEG または WebP |
| ファイルサイズ | 1 MB 以下 |
キャスト写真は縦長(3:4)のため、SNS カードでは上下がクロップされます。顔が中央に写っている構図を推奨します。
5. canonical URL
全ページに <link rel="canonical"> が自動挿入されます。
<!-- キャスト詳細など og:url が明示されているページ -->
<link rel="canonical" href="https://shop.example.com/casts/1" />
<!-- その他のページ(リクエスト URL をそのまま使用) -->
<link rel="canonical" href="https://shop.example.com/home" />
動作の仕組み:
- キャスト詳細(
/casts/:id)ではog:urlと同じ値(ページの完全 URL)を使用します。 - 他のページでは
Astro.url.href(リクエスト URL)を使用します。 - カスタムドメインで公開すると、自動的に本番ドメインの URL が入ります。
6. sitemap.xml
/sitemap.xml にアクセスすると、現在の DB を参照して動的に生成された XML が返ります。
コードの変更なしに、キャストの登録・退店が自動的に反映されます。
収録されるページ
| URL パターン | changefreq | priority |
|---|---|---|
/(年齢確認・サイト入口) |
monthly | 1.0 |
/home |
daily | 0.9 |
/casts |
daily | 0.9 |
/schedule |
daily | 0.9 |
/ranking |
weekly | 0.7 |
/coupon |
weekly | 0.7 |
/system |
monthly | 0.6 |
/recruit/cast |
monthly | 0.5 |
/recruit/staff |
monthly | 0.5 |
/casts/:id(在籍キャスト全員) |
weekly | 0.8 |
収録されないページ
noIndex 指定のページ(/・/favorites)と管理画面(/cmm/*)はサイトマップに含まれません。
キャッシュ
Cache-Control: public, max-age=3600(1 時間)。新規キャスト登録後、最大 1 時間でサイトマップに反映されます。
7. robots.txt
/robots.txt も動的生成されます。カスタムドメインを設定すると、そのドメインの sitemap URL が自動で含まれます。
User-agent: *
Allow: /
Disallow: /cmm/
Sitemap: https://shop.example.com/sitemap.xml
管理画面(/cmm/)はクローラーをブロックします。
8. クローラーバイパスと noIndex
クローラーバイパス(全ページインデックス)
frontend/src/middleware.ts は Google・Bing 等の主要クローラーを User-Agent で判別し、年齢確認リダイレクトをスキップします。クローラーはすべてのコンテンツページに直接アクセスでき、インデックスされます。
対象クローラー: Googlebot / Bingbot / Yahoo Slurp / DuckDuckBot / Baidu / Yandex / SEMrush / Ahrefs
noIndex ページ
| ページ | 理由 |
|---|---|
/favorites(お気に入り) |
localStorage ベースの個人データページ |
/cmm/*(管理画面) |
robots.txt の Disallow: /cmm/ でブロック |
/(年齢確認)はインデックス対象です。Google 検索で店舗名を検索した際、年齢確認ページが入口として表示されます。
9. SEO 設定チェックリスト
ローンチ前に以下を確認してください。
- 管理画面 → 店舗基本情報で
shop_nameを本番の店舗名に設定した - Google Analytics 測定 ID(
G-XXXXXXXXXX)を管理画面のサイト設定に登録した - キャストの
catchphrase(キャッチフレーズ)を入力した(ディスクリプション・OGP に使用) - キャストのメイン画像を設定した(OGP 画像として SNS カードに使用)
- カスタムドメインを HTTPS で公開した(canonical・sitemap・GA が正しいドメインで動作)
-
https://shop.example.com/sitemap.xmlにアクセスして XML が返ることを確認した -
https://shop.example.com/robots.txtにアクセスして正しい内容を確認した - Google Search Console にサイトを登録し、sitemap URL を送信した