Communitygithub.com

VadimOnix/xray-decky

Astro マーケティングサイト (site/) — URL/SEO 契約 (build.format preserve、.html カノニカル、サイトマップ直列化)、5 ロケール i18n 構造、GitHub Pages デプロイワークフロー、Astro メジャーバージョンアップ検証方法。site/ 以下を触るとき、astro またはそのインテグレーションの dependabot 更新をレビューするとき、Pages デプロイをデバッグするとき、SEO 出力 (カノニカル、hreflang、サイトマップ) を監査するときに使用します。

xray-decky とは?

このスキルは、Astro フレームワークで構築された多言語マーケティングサイト (site/) の管理、特に URL 構造、SEO 契約、展開に関するものです。これは、Astro、@astrojs/sitemap、@astrojs/check を使用したスタンドアロンの pnpm プロジェクトであり、依存関係を理解し、破壊的な変更を防ぐために非常に重要な build.format: 'preserve' 設定や serialize フックなどの特定の構成を維持する必要があります。このスキルでは、5 つのロケール (英語、ロシア語、中国語、ペルシア語、スペイン語) の i18n 構造について詳しく説明し、新しいロケールを追加する方法の手順を示し、サイトマップ内のカノニカル URL と hreflang アノテーションが正確に一致することを保証します。また、アップロードされた dist/ レイアウトの差分比較、URL パターンの grep による検証などの手順を含む、Astro のメジャーバージョンアップの検証に関する実践的なガイダンスも提供します。このデプロイにおける robots.txt のニュアンス (実際には機能しない) や、CI プロセスが本番ビルドの前に astro check を実行する理由 (ロケール辞書の欠落を検出するため) についても重要な考慮事項が含まれています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/VadimOnix/xray-decky/tree/HEAD/.claude/skills/site-astro

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Astro サイト (site/)

スタンドアロンの pnpm プロジェクト (独自のロックファイル、プラグインビルドの一部ではありません)。Astro + @astrojs/sitemap + @astrojs/check。GitHub Pages に https://vadimonix.github.io/xray-decky/ としてデプロイされます。

cd site
pnpm install
pnpm run check    # astro check — ロケール辞書を型チェック; CI ゲート
pnpm run build    # → site/dist
pnpm run dev

URL & SEO 契約 (静かに壊れる部分)

これらが一貫している場合にのみ、すべてが機能します:

  • build.format: 'preserve' → フラットページは changelog.html に、ロケールルートは ru/index.html (ディレクトリ) にビルドされます。
  • カノニカル形式: フラットページは .html で終了します。ロケールルートは末尾スラッシュ (…/ru/) を使用します。サイトルートは …/xray-decky/ です。src/lib/urls.ts (absoluteUrl、withBase、localeHref) によって生成されます。
  • サイトマップはカノニカルと文字列一致する必要があります。 astro.config.mjs の serialize フックは、<loc> と自動生成された hreflang <xhtml:link> の代替の両方を書き換えます: ロケールルートセグメント (LOCALE_DIRS) は / を取得し、その他すべての拡張子なしのものは .html を取得します。歴史: 2026-08 より前は <loc> のみを書き換え、一律に .html を追加していたため、クローラーが存在しない ru.html/zh.html/fa.html/es.html に送られていました。
  • サイトマップの hreflang セットは、ページの hreflang セットと等しくなければなりません。 Base.astro は 5 ロケール + x-default を出力します。インテグレーションは 5 つのみを出力するため、serialize は x-default (= en URL) を追加します。Google は両方の配信方法からのアノテーションを読み取り、異なるセットをサブセットとしてではなく競合として扱います。seo-check --site は URL ごとにそれらを比較します。
  • robots.txt はこのデプロイでは機能しません。 /xray-decky/robots.txt に出荷されますが、クローラーは https://vadimonix.github.io/robots.txt のみを読み取り、これは 404 になります (ユーザーサイトリポジトリなし) — 404 は「すべてをクロール」を意味するため、何もブロックされませんが、Sitemap: 行は決して認識されません。サイトマップの検出は、Search Console への登録に完全に依存します。このリポジトリ外での実際の修正: ホストルートの robots.txt を提供する VadimOnix/vadimonix.github.io リポジトリ、またはカスタムドメイン。
  • GitHub Pages は寛容です (拡張子なしのファイル → 200、スラッシュなしのディレクトリ → 301) — これに依存せず、カノニカルを正確に一致させてください。
  • compressHTML: false は意図的です: SEO 監査のために <head> (カノニカル、hreflang、OG、JSON-LD) を grep 可能に保ちます。gzip はサイズを補います。

ロケールを追加する = 1 か所: src/i18n/locales.ts (LOCALES、localePrefixes、hreflangCodes) + src/i18n/types.ts で型指定された辞書ファイル + astro.config.mjs の LOCALE_DIRS + サイトマップインテグレーション設定の locales マップ。astro check は欠落した辞書キーで失敗します — そのため CI はビルドの前にそれを実行します。

デプロイ

.github/workflows/pages.yml: site/** (またはワークフロー自体) に触れる master へのプッシュでトリガーされます。Node 22、pnpm 9、--frozen-lockfile、check → build → site/dist のアップロード → デプロイ。PR ビルドはありません — PR CI はサイトをビルドしません。そのため、緑色の PR はサイトについて何も語りません。

Astro メジャーバージョンアップの検証 (経験的、変更ログを読むのではなく)

Dependabot は astro のみをアップグレードします。ピアインテグレーション (@astrojs/sitemap、@astrojs/check) は遅れます。想定するのではなく、それらがまだ機能することを確認してください。

  1. アップグレードされたバージョンをローカルでビルド: pnpm install --frozen-lockfile && pnpm run check && pnpm run build。
  2. dist/ レイアウトを以前のビルドと比較 (同じ 11 以上のルート、ロケールディレクトリはそのまま、フラット化されていないこと)。
  3. grep -o '<loc>[^<]*</loc>' dist/sitemap-0.xml — すべての URL が実際のファイルのカノニカル形式と一致する必要があります。
  4. dist/index.html と 1 つのロケールページで <link rel="canonical"> と hreflang をスポットチェック。
  5. マージ後、Pages の実行を監視し、ライブ URL をプローブ (curl -s -o /dev/null -w "%{http_code}")。

既知のしきい値: Astro 6 には Node ≥22 が必要 (pages.yml はすでに 22) で、CJS 設定が廃止されました (こちらは .mjs); i18n.routing.redirectToDefaultLocale のデフォルトが変更されました (ここでは無関係 — prefixDefaultLocale: false)。Astro 7 は Vite 8/Rolldown + Rust コンパイラに移行しました — 主にこのサイトにはないインテグレーション/カスタム Vite 設定に影響します。アップグレードガイド: https://docs.astro.build/en/guides/upgrade-to/v6/、https://docs.astro.build/en/guides/upgrade-to/v7/。

その他

  • optimize-images.sh — public/ の画像パイプライン; 重いアセットを追加した後に実行します。
  • Search Console / Yandex 検証タグはレイアウトの head にあります — 削除しないでください。
  • サイトコピー (およびその他すべてのユーザー向け表面 — README、plugin.json、リポジトリメタデータ) の文言/配置ルールは、seo-surfaces スキル + AGENTS.md の「SEO surfaces」にあります。CI: node scripts/seo-check.mjs --site は Pages ワークフローで dist/ に対して実行されます。

関連スキル