Fincs

横断/運用基盤 / 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 制御追加 等)

関連ドキュメント


このページの内容を AI に質問しますか?
関連 spec を自動抽出して ChatGPT / Claude などに渡せます。
AI Prompt で開く →