用語解説

baseタグとは?HTML共有・AI生成サイトでの意味をやさしく解説

HTMLの`<base>`タグは、ドキュメント内のすべての相対URLの基準となるURLを一括指定する要素です。AIが生成したHTMLをプレビューURLで公開した際に画像やCSSが読み込まれない問題の回避策として名前が挙がりますが、意図せずページ内リンクやフォームの動作を変えてしまうリスクも伴います。

ひとことで言うと

`<base href="https://example.com/app/">`のように`<head>`内に書くと、ページ内のすべての相対URLがそのURLを起点に展開されます。`<img src="logo.png">`は`https://example.com/app/logo.png`として扱われます。`<base>`タグは1ページにつき1個だけ有効で、複数書いても最初の1個のみ適用されます。

`href`の末尾スラッシュの有無が動作に影響します。`<base href="https://example.com/app">`(スラッシュなし)の場合、`logo.png`は`https://example.com/logo.png`に展開されます(`app`が末尾のファイル名として扱われるため)。必ず`/`で終わるURLを設定することがほぼすべての用途で正しい記述です。

  • 相手がログインなしで開ける状態か確認する
  • PCとスマホで最低1回ずつ表示を確認する
  • 内部情報・個人情報・不要な外部送信が残っていないか見る
  • レビュー期限と修正時の差し替え方を決めておく

HTML共有で関係する場面

ギガサイト便のようなサービスは、アップロードされたHTMLの`<head>`に`<base href="https://your-preview.gigasite.app/share/xxxx/">`を動的に挿入することで、ZIPに含まれるすべてのアセットへの参照を正しく解決できます。この挿入処理がある場合、利用者は相対パスで書かれたHTMLをそのままアップロードすれば崩れずに表示されます。

しかし`<base>`タグがすでに埋め込まれたHTMLをアップロードした場合は注意が必要です。AIが`<base href="./">`を出力したHTMLをサービスが再度書き換えると、2つの基準URLが競合します。正しく動作させるには、AIに生成させる際に`<base>`タグを出力しないよう指示するか、アップロード前に手動で削除しておくことをお勧めします。

よくある誤解

「`<base>`タグを設定すれば外部リンク(別ドメインへのリンク)も影響を受ける」と心配する人がいますが、絶対URLで書かれたリンクは`<base>`の影響を受けません。`<a href="https://google.com">`は`<base>`の設定に関係なく`google.com`に遷移します。影響を受けるのは`href="contact.html"`のような相対URLのみです。

「`<base target="_blank">`を設定するとすべてのリンクが新しいタブで開く」という効果は意図的に使うケースもありますが、同一ページ内のアンカーリンク(`<a href="#section1">`)も新しいタブで開こうとするため、ページ内ナビゲーションが壊れます。`<base>`の`target`属性は全体への影響を十分理解したうえで設定してください。

安全に使うための注意点

`<base>`タグの`href`にユーザー入力を直接含める実装は避けてください。悪意のある値(例:`javascript:`スキーム)が設定されると、ページ内のすべてのリンクが悪意のあるURLに向いてしまうCSRF的な攻撃に悪用できます。サービス側で`<base>`を動的に挿入する場合は、URLをホワイトリストのドメインに限定するか、厳密に正規化してから埋め込んでください。

AIが生成したHTMLに`<base>`タグが含まれていないことを確認したうえで共有サービスにアップロードすると、サービス側の挿入処理が確実に機能します。アップロード前に`grep '<base' index.html`を実行するだけで確認できます。もしAIが`<base>`タグを出力した場合は、プロンプトに「`<base>`タグは使用しないでください」と明記することで次回の生成から除外できます。

よくある質問

`<base>`タグはHTMLの`<head>`の先頭に書く必要がありますか?

必ずしも先頭でなくてもよいですが、`<base>`より前に書かれた相対URLには影響しないため、実質的に`<head>`の最初に書くことが推奨されます。`<meta charset>`と`<title>`の直後に置くのが一般的なパターンです。

`<base>`タグを使わずにルート相対パスを修正する別の方法はありますか?

テキスト一括置換で`href="/`を`href="./`に変換する方法が最もシンプルです。ただし絶対URLのパスが誤って変換されないよう正規表現を慎重に設定する必要があります。`href="https://`や`href="http://`で始まるURLは変換対象外にしてください。

`<base>`タグがあるページでフォームのsubmitは正常に動きますか?

フォームの`action`属性が相対パスの場合、`<base>`タグの影響を受けます。`<form action="/api/submit">`は`<base>`の基準URLを起点に解決されます。意図したエンドポイントに送信されているかをブラウザの開発者ツールのNetworkパネルで必ず確認してください。

関連記事

「用語解説」の記事をもっと見る →