ひとことで言うと
URLフラグメント(ハッシュフラグメントとも呼ぶ)は、URLの「#」以降の文字列のことです。例えばhttps://example.com/guide#step3にアクセスすると、ブラウザはページをロードしてからid="step3"を持つ要素まで自動スクロールします。この動作はブラウザが単独で処理するため、サーバーへのリクエストには「#step3」が含まれません。
AIで生成した解説ページや手順書HTMLにh2・h3タグにid属性を付けておくと、URLフラグメントで特定のセクションへのリンクを作れます。例えば「料金の確認方法は#pricing-section を参照」という形でチャットに貼ると、受け取った側がリンクをクリックした瞬間に目的のセクションが表示されます。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
HTML共有で関係する場面
長い資料HTMLをURLで共有するとき、「ページのどこを見てほしいか」を伝えるためにURLフラグメントは非常に便利です。ギガサイト便などでURLを発行した後、ブラウザでそのページを開いて目的の見出しにスクロールし、アドレスバーに表示されたURLをそのままコピーすれば、フラグメント付きURLを簡単に取得できます。
SPAフレームワーク(React、Vueなど)を使って生成されたAIサイトでは、URLフラグメントがルーティング(ページ切り替え)に使われる場合があります。この場合、#以降の値はページ内スクロールではなく「どの画面を表示するか」の制御に使われます。どちらの用途かはHTMLソースのJavaScriptコードを確認して判断します。
よくある誤解
「#以降を変えてもサーバーには届かないのでGoogleには見えない」という誤解があります。実際にはGoogleのクローラーはJavaScriptを実行するため、SPAで#を使ったルーティングのページも状況によってはインデックスされます。ただし静的HTMLのアンカーリンク用フラグメントは通常インデックスに影響しません。
「URLフラグメントはid属性にしか使えない」という思い込みもあります。最近のChrome・Firefox・Safariは「テキストフラグメント」という仕様をサポートしており、#:~:text=特定の文字列 という形式で、ページ上の任意のテキストをハイライト+スクロール表示できます。AIが生成したHTMLにid属性がなくても、この機能で特定箇所へのリンクを作れます。
安全に使うための注意点
URLフラグメントはサーバーに送信されないため、ログに記録されません。これは一見プライバシーに優しいように見えますが、SPAでフラグメントルーティングを使うアプリでは、JavaScriptがフラグメントを読み取ってAPIに送信するケースがあります。その場合はフラグメントの内容が外部に送信されていることを意識してください。
フラグメント付きURLをメールやチャットで共有する際、フラグメントは共有先のプレビューカード(OGPカード)に影響しません。OGPカードはフラグメントなしのURLとして処理されるため、カードの表示内容はページ全体を示したものになります。セクション固有のOGP情報をカードに出したい場合は、そのセクションを別URLの独立ページとして公開する必要があります。
よくある質問
HTMLにid属性をつけ忘れたページでもURLフラグメントは機能しますか?
id属性がない場合、ブラウザは対象要素を見つけられずページ先頭のまま表示されます。ただしChromeなどではURLに#:~:text=テキスト内容を付けることでid不要の特定テキストへのスクロールが可能です(テキストフラグメント)。
フラグメント付きURLをSNSにシェアしてもそのまま機能しますか?
基本的に機能します。ただしXなどのSNSでは短縮処理でフラグメントが脱落する場合があります。重要なセクションへのリンクをSNSでシェアする際は、事前に実際にリンクをテストしてスクロール先が正しいか確認してください。
フラグメントとクエリ文字列を同時に使うことはできますか?
できます。URLの構造はscheme://host/path?query#fragmentの順番で、クエリ文字列が先でフラグメントが後です。example.com/page?lang=ja#section2 のように両方指定できます。逆順に書くとフラグメントがクエリとして誤認識されるため順番を守ってください。