本文へ移動
技術を、自社の仕事に。
判断と実行を助けるメディア

記事を検索

Astroのfallback URLが壊れる件、7.3.0で修正

目次 · 6項目

日本語と英語のサイトを Astro で作り、英語ページが無いところを日本語ページで補う(fallback)設定にしていると、英語側のURLを1本ずつ開いて確かめる機会は限られます。ところが、ページ名がロケールコードと同じ文字で始まると、英語側のURLそのものが別の文字列で生成される不具合がありました。/ja/japan-office/ の英語側が /en/enpan-office/ になる、という形です。

Astro 7.3.0 でこの不具合が修正されました。本記事では、日本語を既定にした設定で実際にビルドし、どの版で壊れて直ったのか、自分のサイトが該当するかの確かめ方を整理します。

7.3.0 の変更履歴に書かれた不具合

Astro の変更履歴(CHANGELOG)の 7.3.0 の Patch Changes に、#17861 として次の修正が載っています。

Fixes i18n fallback routes being generated with a corrupted path when the locale code also appears at the start of a later path segment.

例は src/pages/en/enterprise.astro と fallback: { es: 'en' } の組み合わせで、fallback のURLが /es/enterprise ではなく /es/esterprise で生成されていました。修正後は、先頭のロケールのセグメントだけを書き換えます。

npm registry によると 7.3.0 の公開は2026年9月3日で、2026年9月29日時点の最新は 7.3.5 です。

日本語サイトの構成で再現した結果

日本語を既定にしたサイトでも起きるかを、次の条件(ケース2)でビルドして確かめました(2026年9月29日、Linux、Node.js 22、npm registry から各版の astro をインストールし、各版1回ずつ npx astro build で静的出力)。

// astro.config.mjs(検証ケース2の i18n 設定)
import { defineConfig } from 'astro/config';

export default defineConfig({
  i18n: {
    locales: ['ja', 'en'],
    defaultLocale: 'ja',
    fallback: { en: 'ja' },
    routing: { prefixDefaultLocale: true },
  },
});

fallbackType は未指定(既定の redirect)です。src/pages/ja/ に index・japan-office・jazz・recruit、src/pages/en/ に index だけを置き、英語ページの無い3つを fallback の対象にしました。

版dist/en/ に生成されたディレクトリ
6.4.8 / 7.0.0 / 7.2.10enpan-office、enzz、index、recruit
7.3.0index、japan-office、jazz、recruit

ja で始まる japan-office と jazz だけが、enpan-office と enzz に変わっています。recruit は影響を受けていません。6系の最終版である 6.4.8 でも同じ結果でした。

7.2.10 で生成された dist/en/enpan-office/index.html の中身は、次のような転送用のページでした。

<title>Redirecting to: /ja/enpan-office/</title>
<meta http-equiv="refresh" content="2;url=/ja/enpan-office/">
<meta name="robots" content="noindex">
<link rel="canonical" href="/ja/enpan-office/">

転送先の /ja/enpan-office/ は、どこにも存在しないページです。canonical もその存在しないURLを指しています。そして、本来あるべき /en/japan-office/ は生成されていません。

同じi18n設定でビルドした結果を比べた編集部の図。Astro 7.2.10では /en/enpan-office/ が生成されて存在しない /ja/enpan-office/ へ転送され、7.3.0では /en/japan-office/ が生成されて /ja/japan-office/ へ正しく転送される。実際の画面ではなく、ビルド出力を図にしたもの

図で見てほしいのは、英語側のURLと転送先の両方が変わる点です。7.3.0 では dist/en/japan-office/index.html が生成され、/ja/japan-office/ へ転送されました。

壊れる条件と、壊れなかった構成

変更履歴の例に合わせたケース1(en を既定、fallback: { es: 'en' }、prefixDefaultLocale: true、fallbackType: 'rewrite')では、7.2.10 で es/esterprise が生成され、/es/enterprise/ は生成されませんでした。7.3.0 では es/enterprise が生成されました。redirect ではなく rewrite を選んでいても、URLの生成は同じように壊れていたことになります。

ケース3は、既定ロケールに接頭辞を付けない構成です(prefixDefaultLocale: false、fallbackType: 'rewrite'、日本語ページは src/pages/ 直下)。japan-office・jazz に加え、英語のロケールコードで始まる entry も置きましたが、7.2.10 と 7.3.0 の出力は同一で、en/entry・en/japan-office・en/jazz のように正しい名前で生成されました。この条件では壊れませんでした。

ただし、ケース3はケース2と接頭辞の有無と fallbackType の2点が違い、どちらが効いたかは切り分けていません。確かめたのは3構成・各版1回のビルドの静的出力だけで、SSR(オンデマンド描画)やミドルウェア経由の挙動、astro dev の開発サーバー、他の設定の組み合わせは未検証です。

fallback は翻訳が追いつかない間を埋める仕組みなので、英語ページが揃っていない期間ほど、対象になりうるページが増えます。翻訳の進め方は多言語サイトを「AI翻訳で安く」の落とし穴で扱っています。

自分のサイトが該当するかを確かめる

発注側は制作会社に依頼して、制作側は手元のリポジトリで、次の順に確かめます。

  1. 使っている版を確かめる。 npm ls astro で入っている astro の版を見ます。7.3.0 以上なら、この修正は入っています。
  2. i18n の設定を確かめる。 astro.config.mjs の i18n に fallback があるか、routing.prefixDefaultLocale が true かを見ます。検証で壊れたのは、fallback があり、既定ロケールにも接頭辞を付けた構成です。
  3. ページ名を確かめる。 fallback 元のロケールのページで、2つ目以降のセグメントが fallback 先のロケールコードで始まるものを探します。今回の例なら、ja で始まる japan-office や jazz です。変更履歴の例では en で始まる enterprise でした。
  4. ビルド結果を一覧する。 npm run build のあと、fallback 先のディレクトリにできたページを並べます。
# fallback 先(例: en)に生成されたページの一覧
find dist/en -name index.html | sort

# fallback 元(ja)と並べて、名前の食い違いを探す
diff <(cd dist/ja && find . -name index.html | sort) \
     <(cd dist/en && find . -name index.html | sort)

# 転送先の一覧(redirect の場合)
grep -rho 'content="[0-9]*;url=[^"]*"' dist/en | sort

dist/en に enpan-office のような元と違う名前があれば該当します。英語だけにあるページも diff に出るため、en で始まる名前に絞って見てください。転送先に dist/ja に無いパスが出てこないかも確かめます。

7.3.0 以上へ上げる前後で見ること

直すには astro を 7.3.0 以上へ上げます。6.4.8 でも再現したため、6系のままでは直りません。7.0 への移行を含めた判断は、Astro 7.0 へ上げるか、作り直すかで整理しています。

上げる前に dist/en の一覧と転送先の一覧を保存し、上げたあとに同じコマンドで次の3点を比べます。

  • enpan-office のような壊れた名前が消え、japan-office のように元と同じ名前で生成されているか
  • 転送先が、dist/ja に実在するページを指しているか
  • 該当しないページ(今回の recruit など)の一覧が変わっていないか

修正後は、壊れていたURLが生成されなくなります。7.3.0 では en/enpan-office は出力されませんでした。壊れたURLがサイト内のリンクやサイトマップに出ていたかはサイトごとに確かめ、旧URLを redirects などで残すかを判断してください。

7.3.0 にはほかの機能追加や修正も含まれます。変更履歴の 7.3.0 から最新までの節に目を通し、一覧の比較とあわせてプレビューで主要ページを開いて確かめてください。

2026年9月29日に、Astro の変更履歴(packages/astro/CHANGELOG.md の 7.3.0 の節、#17861)と npm registry の astro の公開情報を直接開いて照合し、Linux・Node.js 22 の環境で astro 6.4.8・7.0.0・7.2.10・7.3.0 を各1回ビルドして静的出力を確かめました。検証は本文の3ケースに限り、SSR・ミドルウェア経由の挙動、開発サーバー、他の設定の組み合わせ、7.3.1 以降の版、ホスティング先での転送や404、検索エンジンでの扱いは検証していません。#17861 のプルリクエスト本体と Astro 公式ブログの 7.3 の告知は開けておらず、根拠にしていません。

多言語サイトの保守や Astro の更新は、グリームハブへご相談ください。

Sources

この記事を共有XFacebook
鈴木 翔

技術の可能性に魅了され、学生時代からプログラミングとデジタルアートの分野に深い関心を持つ

この記事のテーマを、自社の次の一歩へ

Webサイトで、実現したいことから。

使う人の目的、必要な機能、更新の体制を整理し、制作・改善で最初に取り組むことを考えます。

  • サイトの目的
  • 機能と使いやすさ
  • 公開後の運用
Web制作・改善を相談する

構想段階からご相談いただけます。この記事の情報を相談フォームに引き継ぎます。

最新記事をメールで受け取る・Web制作ガイドを読む
無料ダウンロード

Web制作 費用・発注・集客 完全ガイド【2026年版】

費用相場・制作会社の選び方・集客戦略をPDFにまとめました。

The PDF and newsletter emails are currently in Japanese.

メルマガにも登録されます。いつでも解除可能です。