年齢確認
概要
18 歳未満のアクセス防止のため、ルート URL / を年齢確認専用ページとしています。確認済みのメインコンテンツは /home 以下に配置します。
動作
- 初回訪問時、
/で「はい(18 歳以上)」「いいえ(退出)」を表示します。 - 「はい」を選択すると Cookie に確認済みフラグを保存します(有効期間内は再表示しません)。
- 確認後、ユーザーは
/home(店舗トップ)へ遷移します。 /home以下に直接アクセスした場合、Cookie がなければ/へリダイレクトします。
なぜ / と /home を分けるか
- コンプライアンスを厳格かつシンプルに実装するためです。
- 配下ページへの直アクセス時も、同一の Cookie チェックで
/に戻せます。
SEO・クローラーの扱い
クローラーバイパス(全ページインデックス)
frontend/src/middleware.ts は Google・Bing 等の主要クローラーを User-Agent で判別し、年齢確認リダイレクトをスキップします。これにより:
- キャスト一覧・個別ページ・出勤表・料金等、すべてのコンテンツページがインデックス可能
- 検索エンジンに対してコンテンツ量・ページランクを蓄積できる
- 検索結果にキャスト名・サービス内容が反映される
なぜクローキングにならないか
クローキングは「ユーザーと検索エンジンに意図的に異なるコンテンツを見せる」行為です。このサイトでは年齢認証後にユーザーが見るページと同一のコンテンツをクローラーに提供しているため、コンテンツの差異はありません。ペイウォール・サブスクリプションサイトのクローラー対応と同様の扱いです。
年齢確認ページ(/)のインデックス
/ はインデックス対象です。Googlebot はクッキーなしで各ページにアクセスしても(クローラーバイパスにより)コンテンツページをそのまま取得します。/ は店舗の公式入口として検索結果に表示されます。ページタイトルは {shop_name} | 年齢確認、canonical URL・OGP も設定されます。
注意事項
- 年齢確認のバイパスや Cookie 無効化による抜け穴は 設計上許可していません。カスタマイズ時も同等の保護を維持してください。
Cookie 仕様
| 項目 | 値 |
|---|---|
| Cookie 名 | age_confirmed |
| 値 | 1 |
| 有効期限 | max-age=86400(24 時間) |
| パス | / |
| SameSite | Lax |
| Secure | Cloudflare Pages は HTTPS 強制のため実質 Secure |
リダイレクト実装
ミドルウェア: frontend/src/middleware.ts
/およびアセット(/_*、/api/*)はチェックをスキップ- それ以外のパスに Cookie がない場合は
302で/へリダイレクト - Cookie の設定とリダイレクトはすべてサーバーサイド(エッジ)で処理される