404ページは必要?Astroで作るエラーページとユーザーを戻す導線

404ページはSEO対策のために作るものではなく、存在しないURLへ来たユーザーをサイト内へ戻すためのページです。AstroとCloudflare Workersで正しい404ステータスを返しながら、Homeや記事一覧への導線を残す構成を確認します。

執筆:ゆまラボ運営者

公開:
404ページは必要?Astroで作るエラーページとユーザーを戻す導線

記事のURLを変更したり、古いリンクが残っていたり、手入力でURLを間違えたりすると、存在しないページへアクセスされることがある。

そのときに表示されるのが404ページ。

サイトを作り始めたばかりだと後回しにしやすい。トップページや記事本文の方が優先度は高いし、404ページは正常な導線からアクセスする場所でもない。

ただ、記事数が増えるとURLも増える。

外部サイトから古いURLへリンクされることもある。SNSに投稿したURLが後から変わる場合もある。検索結果に古いURLが一時的に残ることもある。

存在しないURLへ来た人にブラウザやホスティング側の簡素なエラーだけを返すより、サイト内へ戻れる道を用意しておく意味はある。

404ページは検索順位を上げるためのページではない#

Google Search Centralでは、存在しないページには404 Not Foundまたは410 Goneを返すよう案内している。

404自体は異常な状態ではない。

ページを削除した。URLを間違えた。外部サイトに古いリンクが残っている。

Webサイトを運用していれば普通に発生する。

カスタム404ページを作ったから検索順位が上がる、という話でもない。Googleの説明でも、カスタム404ページはユーザー向けに作るものとして扱われている。

役割はかなり単純で、

目的のページは存在しない

そのことを明確に伝える

サイト内へ戻る選択肢を出す

というもの。

SEOで気を付けるのは、見た目よりHTTPステータスの方になる。

存在しないURLからカスタム404ページを返す流れ

※ 記事内の図は内容を整理するために作成した概念図です。各社の公式資料や実際の製品画面ではありません。

画面には「ページが見つかりません」と表示しているのに、サーバーが200 OKを返すとsoft 404として扱われることがある。

見た目が404ページでも、HTTP上では正常なページになっている状態。

これは避けたい。

すべてHomeへ飛ばすのも違う#

存在しないURLへアクセスされたとき、全部トップページへリダイレクトすれば離脱を防げそうにも見える。

ただ、この方法は使わない方がいい。

Googleは、関連性のない複数の古いURLを一律にホームページへリダイレクトする構成について、ユーザーを混乱させ、soft 404として扱われる可能性があると説明している。

ページの移動先が明確なら301

例えば、

/blog/old-astro-guide/

/blog/new-astro-guide/

のように、古いページと新しいページが実質的に対応しているなら301リダイレクトが合う。

代わりのページがないなら404。

この判断を分ける。

ページが移動した
→ 301

ページが削除され、代替がない
→ 404 または 410

単なる入力ミス
→ 404

「404を見せたくないから全部Homeへ送る」より、存在しないURLは存在しないと返した方が処理としても分かりやすい。

404ページには何を置くか#

Googleはカスタム404ページについて、サイトと同じ見た目やナビゲーションを使い、ホームページや人気記事へのリンクを置く方法を案内している。

ゆまラボなら、そこまで複雑なページは必要ない。

最低限、

  • ページが見つからないこと
  • Home
  • 記事一覧

があれば戻れる。

記事が増えている現在の構成なら、

  • カテゴリ
  • 連載

へのリンクも使いやすい。

404ページにサイト共通のナビゲーションと戻り先を置く構成例

検索フォームは、サイトに検索機能があるなら候補になる。

検索機能がないのに404ページのためだけに追加する必要はない。

人気記事も同じ。

アクセス数から自動で取得する仕組みがあるなら置けるが、404ページのために固定リンクを大量に管理し始めると運用が増える。

404ページは情報量を増やす場所ではない。

「ここにはページがない」と伝えたあと、別の場所へ移れることが分かれば十分。

Astroなら404.astroを置く#

Astroでは、カスタム404ページを作る方法が公式に用意されている。

src/pages/に、

src/pages/404.astro

または、

src/pages/404.md

を作る。

Astroのビルドでは404.htmlとして出力され、多くのデプロイサービスがこのファイルを404ページとして利用する。

最小限なら次のようなページで作れる。

---
const title = 'ページが見つかりません';
---

<main>
  <p>404</p>
  <h1>{title}</h1>
  <p>URLが変わったか、ページが削除された可能性があります。</p>

  <nav aria-label="404ページのナビゲーション">
    <a href="/">Home</a>
    <a href="/blog/">記事一覧</a>
    <a href="/category/">カテゴリ</a>
    <a href="/series/">連載</a>
  </nav>
</main>

実際のサイトでは、このまま独立したデザインにするより、通常ページで使っているヘッダー、フッター、CSSを再利用した方が自然。

404へ来た瞬間だけ別サイトのような見た目になると、リンクを押してよいのか分かりにくい。

ゆまラボなら、現在のロゴとナビゲーションを残し、本文中央だけ404用に変える程度でよい。

Cloudflare Workersでは404.htmlをどう返すか#

ゆまラボはAstroをCloudflare Workersで公開している。

Cloudflare WorkersのStatic Assetsには、存在しないアセットをどう扱うか決めるnot_found_handlingがある。

静的サイトでカスタム404を使う場合は、現在の公式ドキュメントで次の設定が案内されている。

{
  "assets": {
    "directory": "./dist",
    "not_found_handling": "404-page"
  }
}

not_found_handling404-pageにすると、要求されたファイルが見つからない場合に、近い位置の404.htmlを返し、HTTPステータスも404 Not Foundになる。

Astro側では、

src/pages/404.astro

astro build

dist/404.html

Cloudflare側では、

存在しないURL

assetが見つからない

404.htmlを返す

HTTP 404

という流れになる。

Astroで404ページを作っても、ホスティング側が別のルールでindex.html200 OKとして返す構成になっていると意味が変わる。

SPA向けのsingle-page-applicationは、存在しないアセットへindex.html200 OKとして返す設定。

Astroで静的ブログを公開し、404ページを使いたい場合は、SPA用の設定と混同しない方がいい。

表示確認だけでなくステータスも見る#

404ページを作ったあとに確認したいのは画面だけではない。

存在しないURLへアクセスして、カスタム404が表示される。

そのうえでHTTPステータスが404になっていることも確認する。

ブラウザのDevToolsならNetworkタブで確認できる。

コマンドなら次のように見られる。

curl -I https://example.com/does-not-exist/

正常ならレスポンスに、

HTTP/2 404

のようなステータスが返る。

見た目だけ確認して終わると、soft 404を見逃す可能性がある。

もう一つ確認するのは、404ページ内のリンク。

Homeへ戻れるか。

記事一覧へ移動できるか。

スマホでリンクが押しにくくなっていないか。

404ページは通常ページより閲覧回数が少ないので、一度作るとその後ほとんど見なくなる。その分、実装時にリンク切れまで確認しておいた方がよい。

ゆまラボなら作っておく意味はある#

現在のゆまラボは記事数が増え、カテゴリ、連載、タグ、固定ページへの導線も増えている。

公開するURLが増えれば、古いリンクや入力ミスから404へ到達する可能性も増える。

404ページを作ったからアクセスが増えるわけではない。

ただ、せっかくサイトへ来た人に、

404 Not Found

だけ見せて終わるより、

ページが見つからない
Homeへ戻る
記事一覧を見る
カテゴリから探す
連載から探す

まで用意した方が、サイト内を続けて見られる。

実装もAstroなら404.astroを1ページ追加するだけで始められる。

Cloudflare Workers側も404-pageとして扱えば、見た目をサイトに合わせながら正しい404ステータスを維持できる。

このページで優先したいのは装飾より戻り道。

通常のヘッダーとフッターを再利用し、404であることを明確に表示する。そのうえでHomeと記事一覧へ戻れる。

ゆまラボなら、まずその程度の構成で十分だと思う。

参考#