タグ
#Astro
Astroに関する記事を公開しています。
Astro SSR で「404 ページに飛ばす」がソフト404になる問題 — Astro.rewrite と Astro.response.status で正しく 404 を返す
Astro SSR の動的ルートでエントリ未検出時に Astro.redirect("/404") すると 302、Astro.rewrite("/404") にしても HTTP ステータスは 200 になりソフト404になります。Astro が rewrite でステータスを 200 にリセットする機構(astro@7.0.7 のソース)と、404.astro 側で Astro.response.status = 404 を立てて正しく 404 を返す方法をまとめます。
WordPress 移行後に記事内の画像が 404 になる — /wp-content/uploads/ を動的ルート1本で旧 URL のまま救う
WordPress をヘッドレス CMS へ移行したあと、本文が旧 /wp-content/uploads/ を参照したままで記事内の画像が 404 になる問題。404 の 9 割超は実体が移行済みで URL だけが古いので、本文を書き換えずキャッチオール動的ルート 1 本でファイル名からメディアを引いて 301 する設計と、WordPress 命名(-WxH サムネイル・-e 編集版)や .gitignore の落とし穴をまとめます。
無駄なクエリを削ったらクエリが増えた — エッジ SSR のリクエスト内キャッシュ重複排除と、表示不変を A/B で証明する計測
エッジ SSR(Cloudflare Workers + D1)ではレイテンシの支配項は CPU ではなく DB への往復回数です。明らかに無駄なクエリを削ったら本数が 19→22 に増えた——その裏にあるリクエスト内キャッシュの重複排除という機構と、推測で書き換えず「表示が変わっていないこと」を HTML のバイト一致で証明しながら最適化するウォーム A/B 計測の手順をまとめます。
Tailwind v3 の PostCSS が第三者のビルド済み CSS を壊す — @layer の解釈衝突と v4(@tailwindcss/vite)移行
Tailwind v3 を PostCSS 経由で入れると、node_modules のビルド済み CSS まで処理対象になり、ネイティブの @layer を使う標準準拠の第三者 CSS がエラーになります。管理画面が 500 になった実例から、@tailwindcss/vite(v4)移行による解決と、実際に必要だったクラス名の書き換えをまとめます。
日本語 URL の 301 リダイレクトだけが効かない — percent-encoding の大文字・小文字問題
WordPress 移行のリダイレクトで、英語スラッグは動くのに日本語スラッグだけ 404 になる原因は percent-encoding の大文字・小文字でした。ブラウザは大文字(RFC 3986 の正規形)で送り、WordPress は小文字で保存する。URL API が既エンコード文字列を正規化しない仕様と、decode→encode による正規化をまとめます。
astro dev がエラーも出さず死ぬ — Astro 7 の AI エージェント検出と ASTRO_DEV_BACKGROUND
Astro 7 は AI エージェントからの起動を検出すると自動でバックグラウンド + JSON モードに切り替わり、起動失敗の本当の原因が「exited before becoming ready」の一行に丸められます。ASTRO_DEV_BACKGROUND=1 での調査方法と、隠れていた Node.js 22.15 未満の registerHooks エラー、dev server 管理の正道をまとめます。
Webhook 署名検証が body パースで壊れる問題と、生リクエストボディの取得(Astro / Cloudflare Workers)
Slack や Stripe の Webhook 署名検証は「生のリクエストボディ」に対する HMAC のため、フレームワークが body を先にパースすると検証が壊れます。原因と、Astro / Cloudflare Workers での生ボディ取得(request.text / clone)方法をまとめます。