「行き止まり」を案内する

Webサイトを運営していると、リンク切れやURL変更によって、ユーザーが「存在しないページ」にアクセスしてしまうことは避けられません。 そんな時、無機質なブラウザのデフォルトエラー画面が表示されるのと、サイトの世界観を保ったまま「お探しのページはありません」と案内されるのとでは、ユーザーが受ける印象は大きく異なります。

今回は、AstroとCloudflare Pagesでオリジナルの404ページを実装する方法を解説します。

Astroでの実装: 404.astro

Astroでの実装は非常にシンプルです。 src/pages ディレクトリ直下に 404.astro (または 404.md) というファイルを作成するだけです。

---
import BaseLayout from '../layouts/BaseLayout.astro';
---

<BaseLayout title="404 Not Found">
  <div class="center-content">
    <h1>404</h1>
    <p>お探しのページは見つかりませんでした。</p>
    <a href="/">トップへ戻る</a>
  </div>
</BaseLayout>

pnpm build を実行すると、このファイルは dist/404.html として出力されます。

Cloudflare Pages の「マジック」

ここで重要なのが、デプロイ先である Cloudflare Pages の仕様です。 Cloudflare Pages(および多くの静的ホスティングサービス)には、「リクエストされたパスに対応するファイルが見つからない場合、ルートディレクトリにある 404.html を探して表示する」 という機能が標準で備わっています。

つまり、特別なルーティング設定(_redirectsファイルやWorkersによる制御)を書かなくても、単に 404.html を置いておくだけで、勝手にカスタム404ページとして機能してくれるのです。

ちなみに、この 404.html存在しない場合、Cloudflare PagesはサイトをSPA(シングルページアプリケーション)とみなして、すべてのリクエストをトップページ (/) に転送する仕様になっています。作成前に「適当なURLを叩くとホームに戻されてしまった」のは、この仕様によるものです。

詳しくは公式ドキュメントの Serving Pages: Not Found behavior を参照してください。

結論:細部に神は宿る

404ページは、誰も見ないに越したことはないページです。 しかし、万が一のエラー時にこそ、そのサイトの実装品質や運営者の配慮が透けて見えるものです。 メインコンテンツを作り終えたら、ぜひこの「裏口」の整備も忘れずに行いましょう。