横断/運用基盤 / SEO
横断/運用基盤 / SEO
本ページは 2 段構成。上段が biz/CS 向け(ユーザー提示可)、下段(
## 🔧 実装詳細以降)が dev 向け。biz/CS がユーザーへ提示・転用してよいのは上段のみ。
概要
fincs サービスの公開可視性・検索エンジン経由の流入・SNS シェア時のリッチプレビュー対応をまとめた SEO 基盤。
主な構成要素:
- OGP メタタグ: SNS でリンクシェアされた際にタイトル・説明・画像が表示されるよう、各画面でメタタグを出力
- sitemap 自動生成: 検索エンジンクローラー向けに、公開講座・公開コンテンツ・公開トークルームの URL を一覧化したサイトマップを自動生成
- noindex 制御: 非公開講座・未公開コンテンツが検索結果に表示されないよう、画面に noindex メタを出力
- OGP 取得機能: 受講者が外部 URL を共有する際の OGP プレビュー取得用のサーバー側機能
- コンテンツ URL の識別キー化: 旧形式の数値 ID URL から、新形式の識別キー URL(32 文字の英数字)への移行
主な利用想定は、講座 / コンテンツが SNS でシェアされたときに見栄えの良いカード表示を提供、検索エンジン経由の自然流入を確保、非公開コンテンツが誤って検索結果に出ないよう保護、URL 形式の段階的移行。
非公開講座・未公開コンテンツの保護: 講座が非公開設定(プライベート)の場合、または個別コンテンツが未公開状態の場合は、サイトマップから除外され、画面側にも noindex メタが出力されるため、検索結果に表示されない仕組み。
OGP 画像の運用: OGP 画像はグローバル既定値が設定されており、各画面で個別に上書き可能。シェア時に最新画像が反映されない相談を受けた場合は、SNS 側のキャッシュ更新が原因のケースが多い。
未対応の SEO 強化策: canonical URL の明示・JSON-LD(構造化データ)・hreflang(多言語対応)・robots.txt の動的生成等は現時点では未対応。コードリポ外で robots.txt のみ別途管理。
新形式 URL への段階的移行: コンテンツ URL を新形式の識別キーへ移行中。旧形式の数値 ID URL も一定範囲は新形式へ自動的にリダイレクトされる仕組み。
📝 レビュー観点:
- 目的: 公開可視性の制御、SNS シェア時のリッチプレビュー、検索エンジン経由の流入
- 誰が使うか: 受講者・未受講者・検索エンジンクローラー
- どこで使うか: 全公開画面(講座・コンテンツ・記事)
- 隣接機能との関係: PWA(
./pwa.md)、解析(./analytics.md)- CS 問い合わせで頻発する論点: 「OGP 画像が古い」「sitemap に出ない講座」「非公開講座が検索に出るのでは?」「URL の hex 32 文字は何?」
- [本機能特有] コンテンツ識別キー URL: 32 文字 hex の
identifier_keyで旧 ID URL から移行- [本機能特有] canonical / JSON-LD / hreflang は未対応: SEO 強化の改善余地
- [本機能特有] robots.txt は biz 側で S3 に管理: コードリポ外
- [本機能特有] noindex 判定は講座非公開 + コンテンツ未公開で発火
利用シナリオ
シナリオ 1: 公開講座の SNS シェアで OGP 画像が表示される
ユーザーが講座ページの URL を SNS に貼り付けると、講座のタイトル・説明・画像がカード形式でリッチプレビュー表示される。クリックを促す効果的な見せ方となり、流入導線として機能する。
シナリオ 2: 検索エンジンに公開講座 / コンテンツが収集される
サイトマップに最新の公開コンテンツの URL が反映され、検索エンジンクローラーが効率的にサイト内を巡回。検索結果経由の流入を確保する。
シナリオ 3: 非公開講座が検索結果に出ないことを確認する
講師が講座を非公開(プライベート)に設定すると、サイトマップから除外され、画面側にも noindex メタが出力されるため、検索結果には表示されなくなる。CS で「非公開にしたのに検索に出る」相談時は SNS / 検索エンジン側のキャッシュ反映タイミングを確認。
シナリオ 4: 旧形式 URL から新形式 URL への移行
コンテンツ URL が旧形式(数値 ID)から新形式(識別キー)へ移行された場合、旧形式 URL でアクセスしても新形式 URL へリダイレクトされる仕組みで、ブックマークや SNS の貼り付けリンクの互換性が保たれる。
よくある失敗ケース
- 非公開設定なのに検索結果に表示される: 検索エンジン側のキャッシュ更新タイミングによる時間差。すぐに反映されない場合は検索エンジン管理ツールで再クロール依頼が必要
- OGP 画像が古い: SNS 側のキャッシュ。各 SNS のデバッガーツールでキャッシュ更新が必要
- 識別キー切替時の旧 URL 重複クロール: 検索エンジンが旧 URL と新 URL の両方を記録するケース。重複コンテンツの最適な取り扱いは未対応(改善対象)
- 「見つからない」エラー画面の誤クロール: 該当画面に noindex メタが出力されていないため、検索エンジンが残存記録するケースあり(改善対象)
権限別仕様
権限定義は ../user-roles.md 参照。
横断軸(公開可視性)
| 操作 | 未受講者 | 受講者 | 講師 | 運営アドミン |
|---|---|---|---|---|
| 公開講座の OGP 取得 | ○ | ○ | ○ | ○ |
| 非公開講座の OGP / 検索 | × | × | × | × |
| sitemap.xml の参照 | ○ | ○ | ○ | ○ |
📝 レビュー観点:
- 非公開(プライベート)講座は sitemap 除外 + noindex の二重ガード
- コンテンツの未公開状態(PUBLISH 以外)も noindex
機能詳細(ふるまい)
OGP 生成
- 各画面で OGP 関連メタタグ(タイトル・説明・画像・URL・タイプ・言語・サイト名)を出力
- 画像はサービス全体のグローバル既定値があり、画面ごとに個別の画像で上書き可能
- 言語は ja_JP 固定、サイト名は Fincs 固定
サイトマップ自動生成
サイトマップに含める対象:
- 公開講座(プライベート設定でないもの)
- 公開コンテンツ(公開状態のもの)
- 公開トークルーム
サイトマップから除外する対象:
- 運営アドミン画面
- マイページ・決済関連画面
- 入会途中の画面(決済前・契約前)
- 非公開講座
- 未公開コンテンツ
サイトマップはリリース時に再生成され、配信される。
noindex 制御
以下の条件のいずれかに該当する画面では、検索エンジンに収集させない指示(noindex, nofollow)を出力:
- 講座が非公開(プライベート)設定
- コンテンツが未公開状態
コンテンツ URL の識別キー化
- 旧形式: 数値 ID ベースの URL
- 新形式: 32 文字の識別キーベースの URL
- 移行は機能トグルで段階的に有効化
- 旧形式 URL でアクセスされた場合も、一定範囲は新形式へ自動リダイレクトする救済機能あり
- 適用対象: 動画 / ライブアーカイブ / ライブ予定 / ライブ本編 / 資料 / 記事
未対応項目
- canonical URL の明示
- JSON-LD(構造化データ)
- hreflang(多言語対応)
- robots.txt の動的生成(コードリポ外で別途管理)
📝 レビュー観点:
- 入力 → 処理 → 出力: 画面の useHead / useMetaTags 経由でメタタグ出力 → クローラー / SNS 取得
- エッジケース: 404 ページの noindex 不在、識別キー切替時の重複クロール、og:image の本番 S3 URL ハードコード
- エラー表示: OGP 取得失敗時は「OGP取得不可」を返却
admin 操作
該当なし / 実装されていない
- OGP 画像の運営アドミン側差し替え経路: 個別経路は無し(講座編集経由)
- コンテンツ識別キーの一括移行: 運営アドミンの URL 置換経路で対応(
../admin/contents.md参照)
品質 / 約束事項
- 応答性: OGP は内部キャッシュ 90 日、sitemap はリリース時に S3 に PUT
- 信頼性: sitemap 生成失敗時はリリース後の CI チェックで検出
- 制限値:
- og:locale: ja_JP 固定
- og:site_name: Fincs 固定
- データ保持: 識別キーは UNIQUE 32 文字 hex
📝 レビュー観点:
- [本機能特有] og:image の本番 S3 URL ハードコード: stg/dev でも同じ画像を参照
- [本機能特有] sitemap で talkRoom がクエリパラメータ URL:
?tab=talk&room=...形式
変更履歴(リリースノート候補)
v2.29.2: 2026-05-04(PSD 初版)
- [PSD 追加] 本ドキュメント初版作成。v2.29.2 時点の実装を起こし。機能追加・変更は含まない
📝 レビュー観点:
- 過去の主要変更(識別キー導入 / sitemap モジュール導入 / noindex 制御追加 等)
関連ドキュメント
- 権限定義:
../user-roles.md - 用語辞書:
../terminology.md - 関連 PSD:
./pwa.md— PWA / Service Worker./analytics.md— 解析・モニタリング../admin/contents.md— コンテンツ識別キー置換