言語を切り替える
テーマを切り替える

Astro サイト SEO 完全ガイド:メタタグから検索順位向上まで

Astro で美しいブログを 1 週間かけて構築し、期待に胸を膨らませて公開したものの、2 ヶ月経っても Google で記事タイトルを検索しても 3 ページ目以降。Google Analytics を開いても、訪問者数は一桁のまま。「どこか設定を間違えているのだろうか」と不安になっていませんか。

私もまったく同じ経験をしました。Next.js から Astro に移行した当初、「Astro はパフォーマンスが抜群」「従来の React フレームワークより読み込みが 40% 速い」「Lighthouse で 100 点が取れる」と聞いていました。サイト自体は確かに速くなりましたが、検索順位はまったく上がりませんでした。ようやく気づいたのは、パフォーマンスの高さだけでは不十分で、SEO 設定こそが鍵だということです。

幸い、Astro の SEO 対策は難しくありません。本記事では、メタタグ、サイトマップ、robots.txt、構造化データといったコア設定を手順どおりに解説します。各セクションにコピペ可能なコード例も用意しているので、30 分ほどで基本設定を完了できます。1〜2 週間もすれば、Google Search Console でインデックス登録が始まるはずです。

なぜ Astro は SEO に特に向いているのか

具体的な設定に入る前に、コンテンツサイトに Astro を選んだ理由をお話しします。

Astro の SEO 上の天然の強み

Astro の最大の特徴は デフォルトで JavaScript ゼロ であること。ページを直接静的 HTML として生成するため、検索エンジンのクローラーは純粋な HTML をそのまま読め、JS の実行完了を待つ必要がありません。

この「アイランドアーキテクチャ(Islands Architecture)」は非常に賢い設計です。ページ主体は静的 HTML、インタラクションが必要な部分(「いいね」ボタンなど)だけ JS をロードします。初回表示が非常に速く、Google のクローラーに好まれます。

以前 Next.js を使っていたときは、SSR を有効にしてもバンドルされる JS はかなり大きかった。Astro に移行してから JavaScript サイズは 90% 削減され、Lighthouse スコアは 78 点から 98 点に跳ね上がりました。

90%
JS サイズ削減
Next.js から Astro への移行後
78→98 点
Lighthouse 向上
スコアが 20 点上昇
30 分
設定時間
コア SEO 設定の完了まで

他のフレームワークとの比較

正直、フレームワークには適材適所があります。簡単に比較してみましょう。

Astro:ブログ、ドキュメントサイト、マーケティングサイトなど、コンテンツ中心のサイト向け。読み込み速度が速く、2025 年のデータでは開発者の使用率が 18% まで増加しています。

Next.js:管理画面や EC サイトなど、複雑なインタラクションが必要な Web アプリ向け。クライアント側の状態管理が多用される場合に適しています。

Gatsby:Astro と同様に静的生成ですが、バンドルサイズがやや大きく、ビルド速度も Astro より遅い傾向があります。

実例として、友人の技術ブログを Next.js から Astro に移行したところ、読み込み速度が約 50% 向上しました。Google Search Console のデータでは、平均滞在時間が 1 分 20 秒から 2 分 10 秒に伸びました。この改善は明白です。

基礎編 — メタタグの完全設定

本題に入りましょう。メタタグは SEO 最適化の第一歩であり、最も見落としがちな部分でもあります。

基本 3 点セット:title、description、keywords

Astro を使い始めた頃、どのメタタグから書けばいいのか迷いました。<meta> タグは山ほどありますが、核となるのは 3 つだけです。

title タグ:最も重要。Google 検索結果に表示される大見出しです。長さは 50〜60 文字に収めるのがベスト。長すぎると省略されます。

description タグ:検索結果の下に表示される灰色の説明文。120〜160 文字で、核となるキーワードを含める必要があります。Google はクリック率(CTR)で結果の良し悪しを判断するため、ここを魅力的に書くと CTR が 20〜30% 向上します。

keywords タグ:正直、Google は現在ほぼ見ていません。ただし書いておいて損はないので、3〜5 個のキーワードで十分です。

Astro での設定は非常に簡単。.astro ファイルの <head> 部分に直接記述します:

---
const title = "Astro サイト SEO 完全ガイド";
const description = "メタタグ、サイトマップ、robots.txt、構造化データまで、Astro サイトの SEO 設定手順を完全解説。";
---

<head>
  <title>{title}</title>
  <meta name="description" content={description} />
  <meta name="keywords" content="Astro SEO, Astro 最適化, メタタグ, sitemap" />
</head>

Open Graph と Twitter Card

これらは SNS でシェアされたときに使われます。X(Twitter)や LINE でリンクを貼ったとき、自動でタイトルや画像が表示されるのを見たことがありますよね。あれが Open Graph(OG)タグの働きです。

必須なのは以下のタグです:

<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:image" content="https://yoursite.com/og-image.jpg" />
<meta property="og:url" content="https://yoursite.com/current-page" />
<meta property="og:type" content="article" />

<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content="https://yoursite.com/twitter-image.jpg" />

og:image の落とし穴:画像サイズは重要で、推奨は 1200x630px です。以前 500x300 の小さな画像を使ったときは、SNS シェア時の表示がぼやけてしまいました。推奨サイズに直してからは、くっきりと表示されています。

コンポーネントで一元管理

各ページに手動でメタタグを書くのは面倒です。賢い方法は BaseHead.astro コンポーネントを作成し、一元管理すること。

src/components/BaseHead.astro を作成します:

---
interface Props {
  title: string;
  description: string;
  image?: string;
}

const { title, description, image = "/default-og-image.jpg" } = Astro.props;
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
---

<head>
  <!-- 基本メタ -->
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />

  <!-- SEO -->
  <title>{title}</title>
  <meta name="description" content={description} />
  <link rel="canonical" href={canonicalURL} />

  <!-- Open Graph -->
  <meta property="og:type" content="website" />
  <meta property="og:url" content={canonicalURL} />
  <meta property="og:title" content={title} />
  <meta property="og:description" content={description} />
  <meta property="og:image" content={new URL(image, Astro.site)} />

  <!-- Twitter -->
  <meta name="twitter:card" content="summary_large_image" />
  <meta name="twitter:title" content={title} />
  <meta name="twitter:description" content={description} />
  <meta name="twitter:image" content={new URL(image, Astro.site)} />
</head>

ページファイルでの使用例:

---
import BaseHead from '../components/BaseHead.astro';
---

<html>
  <BaseHead
    title="私の記事タイトル"
    description="記事の説明文"
    image="/my-article-cover.jpg"
  />
  <body>
    <!-- ページコンテンツ -->
  </body>
</html>

Content Collections でブログ記事を管理しているなら、frontmatter からタイトルや説明を自動抽出できるのでさらに便利です。新しい記事を書くたびに、メタタグが自動で設定されます。

実践編 — サイトマップと Robots.txt

メタタグの次は、Google にサイトを見つけてもらうための設定です。サイトマップと robots.txt が必要になります。

Sitemap:検索エンジンへの地図

サイトマップは、サイト内の全ページリストを含む XML ファイルです。Google のクローラーはこれを見て、どのページをクロールすべきか判断します。データによると、サイトマップを設定することでインデックス登録までの時間が約 50% 短縮されるそうです。

Astro での設定は超簡単。公式の @astrojs/sitemap プラグインを使うだけです:

npx astro add sitemap

このコマンドを実行すると、astro.config.mjs が自動更新されます。

import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap';

export default defineConfig({
  site: 'https://yoursite.com',  // ドメインを必ず設定してください
  integrations: [sitemap()],
});

重要site プロパティは必須です。これを忘れるとサイトマップが生成されず、ビルドエラーになります。私も最初は site を設定し忘れて、ビルド時にエラーが出続けました。

設定後 npm run build を実行すると、dist/ ディレクトリに sitemap-0.xmlsitemap-index.xml が生成されます。ページ数が 5 万を超える場合は、自動的に複数のサイトマップに分割されます。

最後に、<head> にサイトマップへのリンクを追加しておきましょう:

<link rel="sitemap" href="/sitemap-index.xml" />

Robots.txt:クローラーへの指示書

Robots.txt は、どのページをクロールしてよくて、どのページはダメかを検索エンジンに伝えます。管理画面やテストページなどは除外したいですよね。

設定方法は 3 つあります。初心者には最も簡単な方法 1 をおすすめします。

方法 1:静的ファイル(初心者向け)

public/ ディレクトリに robots.txt を作成します:

User-agent: *
Allow: /

Sitemap: https://yoursite.com/sitemap-index.xml

この設定は、すべての検索エンジンに全ページのクロールを許可し、sitemap の場所を伝えます。

特定のパスを除外したい場合:

User-agent: *
Allow: /
Disallow: /admin/
Disallow: /test/

Sitemap: https://yoursite.com/sitemap-index.xml

方法 2:動的生成

astro.config.mjssite 設定を再利用したい場合、src/pages/robots.txt.ts を作成します:

import type { APIRoute } from 'astro';

const robotsTxt = `
User-agent: *
Allow: /

Sitemap: ${import.meta.env.SITE}/sitemap-index.xml
`.trim();

export const GET: APIRoute = () => {
  return new Response(robotsTxt, {
    headers: { 'Content-Type': 'text/plain' },
  });
};

方法 3:プラグインを使う

手書きが面倒なら astro-robots-txt プラグインも使えます:

npm install astro-robots-txt

astro.config.mjs に追加:

import robotsTxt from 'astro-robots-txt';

export default defineConfig({
  site: 'https://yoursite.com',
  integrations: [
    sitemap(),
    robotsTxt(),
  ],
});

Baidu SEO の特別な注意点

ここで Baidu について触れておきます。Baidu には特殊な要件があります:sitemap-index.xml をサポートしていません。robots.txt に sitemap-index.xml を書くと「Robots でブロック」と表示され、クロールできなくなります。

Baidu SEO が必要な場合の対処法:

  1. robots.txt には単一の sitemap ファイルパス(例:sitemap-0.xml)だけを書き、sitemap-index.xml は書かない
  2. Baidu 向けに簡略版 sitemap を別途用意し、Baidu Webmaster Tools から手動で送信

個人的には Google を主軸にし、Baidu の Webmaster Tools から手動で sitemap を送信しています。技術ブログの場合、Google のトラフィック比率のほうが大きいからです。

Google Search Console への送信

サイトマップと robots.txt を設定したら、Google Search Console に sitemap を送信しましょう。手順は簡単です:

  1. サイトを追加して所有権を確認
  2. 左メニューの「サイトマップ」をクリック
  3. sitemap-index.xml と入力して送信

送信後、通常 1〜3 日でクロールが始まります。Search Console でクロール進捗と問題を確認できます。「検出」から「インデックス登録済み」に変わった瞬間の達成感は、一度味わう価値があります。

上級編 — 構造化データ(JSON-LD)

構造化データと聞くと難しそうですが、設定は簡単で効果は絶大です。

構造化データとは?なぜ設定するのか

検索結果に、星評価や著者名、レシピの調理時間やカロリーなどが表示されているのを見たことはありませんか。これが「リッチリザルト(Rich Snippets)」で、構造化データによって実現されています。

構造化データとは、Google が理解できる形式で「これはブログ記事です」「著者は誰です」「いつ公開されましたか」を伝える仕組み。サイトにラベルを貼るようなものです。

Google は JSON-LD 形式を推奨しています。JSON ベースで書きやすく、設定後は検索結果の CTR がかなり向上します。私のブログでは設定後、CTR が約 15% 向上しました。

Astro での JSON-LD 実装

Astro では set:html ディレクティブで簡単に挿入できます。src/components/StructuredData.astro コンポーネントの例:

---
interface Props {
  type: 'WebSite' | 'BlogPosting' | 'Article';
  title: string;
  description: string;
  author?: string;
  datePublished?: string;
  image?: string;
}

const {
  type = 'Article',
  title,
  description,
  author = 'Your Name',
  datePublished,
  image
} = Astro.props;

const canonicalURL = new URL(Astro.url.pathname, Astro.site);

const structuredData = {
  "@context": "https://schema.org",
  "@type": type,
  "headline": title,
  "description": description,
  "author": {
    "@type": "Person",
    "name": author
  },
  "datePublished": datePublished,
  "image": image ? new URL(image, Astro.site).href : undefined,
  "url": canonicalURL.href,
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": canonicalURL.href
  }
};
---

<script type="application/ld+json" set:html={JSON.stringify(structuredData)} />

記事ページでの使用例:

---
import StructuredData from '../components/StructuredData.astro';

const frontmatter = {
  title: "Astro サイト SEO 完全ガイド",
  description: "Astro SEO 設定手順を完全解説",
  author: "Easton",
  pubDate: "2025-12-02",
  coverImage: "/cover.jpg"
};
---

<html>
  <head>
    <StructuredData
      type="BlogPosting"
      title={frontmatter.title}
      description={frontmatter.description}
      author={frontmatter.author}
      datePublished={frontmatter.pubDate}
      image={frontmatter.coverImage}
    />
  </head>
  <body>
    <!-- 記事コンテンツ -->
  </body>
</html>

注意:必ず set:html を使ってください。そうしないと JSON がテキストとしてエスケープされ、効果がありません。

よく使う Schema タイプ

サイトの種類に応じて、異なる Schema を選べます。

WebSite:トップページ向け。Google に「これは Web サイトです」と伝える

{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "サイト名",
  "url": "https://yoursite.com",
  "description": "サイトの説明"
}

BlogPosting:ブログ記事向け

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "記事タイトル",
  "author": {
    "@type": "Person",
    "name": "著者名"
  },
  "datePublished": "2025-12-02",
  "image": "カバー画像 URL"
}

Article:ニュース記事向け。BlogPosting と似ていますが、Google の要件がより厳しい場合があります。

TypeScript の型チェックが必要なら astro-seo-schema パッケージが使えます:

npm install schema-dts astro-seo-schema

完全な TypeScript 定義が提供され、入力時に IntelliSense が効くのでミスを減らせます。

検証とテスト

構造化データを設定したら、必ず検証しましょう。2 つのツールがあります:

  1. Schema.org Validator:ページ URL を貼り付け、JSON-LD が標準に準拠しているか確認
  2. Google リッチリザルトテスト:Google が正しく認識できるか確認(こちらのほうが重要)

両方使うことをおすすめします。片方だけ通っても、もう片方で警告が出ることがあります。両方パスして初めて設定完了です。

よくあるエラー:

  • 必須フィールドの欠落(datePublished など)
  • 画像 URL が不完全(相対パスではなく絶対パスを使う)
  • JSON 形式の誤り(余分なカンマや引用符の欠落)

Google 検索結果に記事の評価や公開日時が表示された瞬間の達成感は、設定の手間を報いてくれます。

パフォーマンス最適化も SEO の一部

サイトのパフォーマンスも SEO の重要な要素です。Google はページ読み込み速度が検索順位に影響すると明言しています。データによると、55% のユーザーが 3 秒以内に読み込まれないサイトから離脱します。

Core Web Vitals:Google の 3 大パフォーマンス指標

Google がサイトパフォーマンスを測る 3 つの指標を「Core Web Vitals」と呼びます。

LCP(Largest Contentful Paint):メインコンテンツの表示完了時間。基準は 2.5 秒以内。4 秒超は「Poor」。

FID(First Input Delay):ユーザーが初めてページ要素をクリックしてからブラウザが応答するまでの時間。基準は 100 ミリ秒以内。

CLS(Cumulative Layout Shift):ページ要素が突然動くかどうか。ボタンを押そうとした瞬間に画像が読み込まれてボタンが下にずれる、といった現象。基準は 0.1 以内。

この 3 指標は Google 順位に直接影響します。Astro はもともとパフォーマンスに優れているので、少し注意するだけで達成しやすいでしょう。

Astro パフォーマンス最適化のテクニック

画像の最適化

画像はサイトを遅くする最大の原因のひとつ。Astro の @astrojs/image 統合(現在は Astro コアに組み込み済み)で自動最適化できます:

# 旧版ではインストールが必要、新版は組み込み済み
# npm install @astrojs/image

Astro の <Image> コンポーネントを使います:

---
import { Image } from 'astro:assets';
import myImage from '../assets/my-image.jpg';
---

<Image
  src={myImage}
  alt="画像の説明"
  width={800}
  height={600}
  loading="lazy"
/>

このコンポーネントは自動的に:

  • デバイスサイズに応じた複数バージョンを生成
  • WebP 形式に変換(サイズ削減)
  • 遅延読み込み(スクロールして表示位置に来たときだけロード)

以前のプロジェクトでは、トップページに 10 枚の大きな画像があり、LCP は 4.2 秒でした。<Image> コンポーネントに置き換えたら 1.8 秒まで改善しました。

フォントの最適化

カスタムフォントもパフォーマンスの敵です。最も簡単な最適化は font-display: swap を追加すること:

@font-face {
  font-family: 'MyFont';
  src: url('/fonts/my-font.woff2') format('woff2');
  font-display: swap; /* ここがポイント */
}

font-display: swap は、フォント読み込み中はシステムフォントでテキストを表示し、読み込み完了後に切り替える設定。ユーザーが空白ページを見る時間をなくせます。

より良い方法は Google Fonts の最適化版を使うこと:

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">

URL 末尾の &display=swap がフォント最適化のポイントです。

コード分割と遅延読み込み

Astro のアイランドアーキテクチャ自体が最良のコード分割です。React や Vue コンポーネントを使う場合は、遅延読み込みディレクティブを忘れずに:

---
import MyHeavyComponent from '../components/MyHeavyComponent.jsx';
---

<!-- コンポーネントがビューポートに入ったときだけロード -->
<MyHeavyComponent client:visible />

client:visible はコンポーネントがスクロールして表示領域に入るまで JS をロードしません。初回表示速度が大幅に向上します。

Lighthouse でパフォーマンスを監視

最適化後、効果を確認するには Lighthouse を使います。

Chrome で F12 を押して開発者ツールを開き、「Lighthouse」タブで「Analyze page load」をクリック。100 点満点でスコアが付き、すべてのパフォーマンス問題がリストアップされます。

私の習慣は、新バージョンを公開する前に必ず Lighthouse を実行し、90 点以上を維持すること。90 点未満なら原因を特定して対処します。

オンラインツールの PageSpeed Insights も便利。URL を入力するだけで計測でき、実ユーザーのパフォーマンスデータも確認できます。

Astro の強みはここにあります。デフォルトで JavaScript ゼロなので、パフォーマンスの土台が良い。Astro でブログを再構築したら、Lighthouse スコアは 78 点から 98 点に跳ね上がりました。

実践チェックリストとよくある問題

ここまでの設定内容を、チェックリストにまとめました。1 項目ずつ確認してください。

SEO 設定チェックリスト(15 項目)

基本設定

  • astro.config.mjssite フィールドを設定
  • BaseHead.astro コンポーネントを作成し、メタタグを一元管理
  • 各ページにユニークな title(50〜60 文字)
  • 各ページに description(120〜160 文字)
  • Open Graph タグを設定(title、description、image、url)
  • Twitter Card タグを設定

Sitemap と Robots

  • @astrojs/sitemap をインストール・設定
  • <head> に sitemap リンクを追加
  • robots.txt を作成
  • Google Search Console に sitemap を送信済み

構造化データ

  • トップページに WebSite タイプの JSON-LD を設定
  • 記事ページに BlogPosting/Article タイプの JSON-LD を設定
  • Schema.org Validator で検証済み
  • Google リッチリザルトテストで検証済み

パフォーマンス最適化

  • Lighthouse スコア 90 以上
  • Core Web Vitals 3 指標達成(LCP 2.5 秒以内、FID 100ms 以内、CLS 0.1 以内)

このチェックリストを印刷して 1 項目ずつ確認しましょう。すべてチェックが付けば、Astro サイトの SEO 基本設定は完了です。

よくある問題のトラブルシューティング

Q1:Google にインデックスされない

考えられる原因と対処法:

  1. robots.txt がクロールをブロックDisallow: / があれば削除
  2. sitemap 未送信:Google Search Console で sitemap を送信
  3. サイトが新しすぎる:新規サイトは 1〜2 週間かかることも。待つ
  4. コンテンツ品質が低い:Google は低品質コンテンツをインデックスしない。実用的な価値を確保

Q2:sitemap 送信後もエラーが出る

以下を確認:

  • astro.config.mjssite フィールドが正しいか
  • sitemap の URL にブラウザでアクセスできるか(yoursite.com/sitemap-index.xml
  • 404 を返すページがないか
  • Baidu の場合、sitemap-index を使っていないか(Baidu は非対応)

Q3:Baidu SEO はどうすればいい?

Baidu SEO は Google と異なる点があります:

  1. robots.txt に sitemap-index.xml を書かず、単一 sitemap ファイルパスを指定
  2. Baidu Webmaster Tools から手動で sitemap を送信
  3. Baidu は新規サイトの審査が厳しく、インデックスまでの時間は Google より長い
  4. Baidu は中国語コンテンツの品質とオリジナリティを重視

Q4:多言語サイトの SEO 設定は?

多言語対応サイトでは hreflang タグを追加します:

<link rel="alternate" hreflang="zh-CN" href="https://yoursite.com/zh/article" />
<link rel="alternate" hreflang="en-US" href="https://yoursite.com/en/article" />
<link rel="alternate" hreflang="x-default" href="https://yoursite.com/en/article" />

x-default でデフォルト言語版を指定。Google が各言語版の関係を正しく認識できます。

継続的な最適化の提案

SEO は一度設定すれば終わりではなく、継続的な改善が必要です。

コンテンツを定期的に更新:調査によると、定期的に更新するサイトの検索順位は静的サイトより約 30% 高い傾向。週 1〜2 本の記事公開を推奨します。

Google Search Console データを監視

  • どのキーワードがトラフィックをもたらしているか
  • クリック率の低いページの title と description を最適化
  • クロールエラーを確認して修正

ユーザーの検索キーワードを分析

  • どんな語句でサイトにたどり着いているか
  • それらの語句で新コンテンツを作成
  • 既存記事を最適化し、関連キーワードを追加

CTR の低いページを最適化

  • 表示回数は多いのに CTR が低いページは、title か description が魅力的でないサイン
  • より引きつける description に書き直す
  • title に数字、疑問形、感情を込めた語句を追加

私は毎週 1 時間 Search Console データを見て、改善点を洗い出しています。この習慣を続けると、順位向上が実感できます。

まとめ

Astro は SEO に天然の強みがあり、設定もそれほど複雑ではありません。

コアは 3 つ:

  1. 基本メタタグ:title、description、OG タグを BaseHead コンポーネントで一元管理
  2. Sitemap と robots.txt:公式プラグインで一行コマンド、Google Search Console への送信を忘れずに
  3. 構造化データ:JSON-LD を設定し、リッチリザルトを狙う

パフォーマンス最適化も見逃せません。Lighthouse スコア 90 以上が基本要件。画像の遅延読み込み、font-display: swap など、小さな工夫も順位向上に効きます。

SEO 設定は少し手間がかかりますが、順位が上がった瞬間、すべて報われます。本記事の手順どおり、30 分でコア設定を完了できます。1〜2 週間もすれば、Google Search Console でインデックス登録が始まるはずです。

今すぐ Astro プロジェクトを開き、上記チェックリストに沿って設定を進めましょう。sitemap を送信したら、あとは待つだけ。1 週間後にインデックス状況を確認すれば、順位向上の驚きが待っています。

頑張ってください!

Astro サイト SEO 完全設定フロー

メタタグから検索順位向上まで、サイトマップ・robots.txt・JSON-LD 構造化データを含む 30 分 SEO 設定

⏱️ 目安時間: 30 分

  1. 1

    ステップ1: Astro の SEO 上の強みと基本メタタグの設定

    Astro の SEO 上の強み:
    • デフォルトで JavaScript ゼロ、静的 HTML を生成
    • 検索エンジンのクローラーは純粋な HTML コンテンツをそのまま読める
    • Islands アーキテクチャでページ主体は静的 HTML、インタラクション部分だけ JS をロード
    • JavaScript サイズを 90% 削減、Lighthouse スコアは 78 点から 98 点へ

    基本 3 点セット:

    title(タイトル)
    • 各ページにユニークで説明的なタイトルを設定
    • 長さは 50〜60 文字
    • キーワードを含める

    description(説明)
    • 各ページに説明文を設定
    • 長さは 150〜160 文字
    • クリックを促す内容に

    keywords(キーワード)
    • Google はほぼ使わないが、他の検索エンジンでは使う場合がある
    • 3〜5 個に絞って残しておくのがおすすめ

    Astro での設定:
    • Layout コンポーネントに Head コンポーネントを追加
    • frontmatter から title と description を読み取る
    • メタタグを動的に生成
  2. 2

    ステップ2: Open Graph と Twitter Card タグの設定

    Open Graph タグ:
    • og:title:シェア時のタイトル、通常は title と同じ
    • og:description:シェア時の説明、通常は description と同じ
    • og:image:シェア時の画像、1200x630 ピクセル推奨
    • og:url:ページの完全 URL
    • og:type:ページ種別、ブログは article、トップは website

    Twitter Card タグ:
    • twitter:card:カード種別、summary_large_image または summary
    • twitter:title:Twitter シェア時のタイトル
    • twitter:description:Twitter シェア時の説明
    • twitter:image:Twitter シェア時の画像

    Astro での設定:
    • title、description、image などを受け取る SEO コンポーネントを作成
    • すべての Open Graph と Twitter Card タグを生成
    • Layout コンポーネントで使用
  3. 3

    ステップ3: Sitemap と robots.txt の設定

    Sitemap 統合のインストール:
    • 実行:npm install @astrojs/sitemap
    • astro.config.mjs に sitemap 統合を追加
    • site URL を設定

    sitemap.xml の自動生成:
    • Astro がすべてのページをスキャン
    • sitemap.xml ファイルを生成
    • 各ページの URL、最終更新日時、優先度などを含む

    robots.txt の作成:
    • public ディレクトリに robots.txt を作成
    • クローラールールを設定(すべてのクローラーを許可、sitemap の場所を指定)

    sitemap の送信:
    • Google Search Console にログイン
    • sitemap.xml の URL を送信
    • インデックス状況を定期的に確認
  4. 4

    ステップ4: JSON-LD 構造化データの追加

    構造化データが必要な理由:
    • 検索結果のリッチさを向上
    • 評価、著者、公開日時などを検索結果に表示
    • クリック率の向上

    よく使う構造化データの種類:

    Article(記事ページ)
    • タイトル、著者、公開日時、カテゴリなどを含む

    BreadcrumbList(パンくずリスト)
    • サイト構造の理解を助ける

    Organization(組織情報)
    • ロゴ、連絡先などを含む

    Astro での設定:
    • 構造化データコンポーネントを作成
    • ページ種別に応じた JSON-LD を生成
    • Layout コンポーネントで使用

    構造化データの検証:
    • Google リッチリザルトテストで JSON-LD が正しいか確認
    • エラーや警告がないかチェック
  5. 5

    ステップ5: SEO 最適化のベストプラクティスと継続的な改善

    SEO 最適化のベストプラクティス:各ページにユニークで説明的な title と description を設定、セマンティック HTML(<article>、<section>、<header> など)を使う、画像を最適化(alt 属性、WebP 形式、遅延読み込み)、URL 構造を最適化(意味のある URL にキーワードを含める)、内部リンクを最適化(関連記事リンクでページの重み付けを向上)。継続的な改善の提案:コンテンツを定期的に更新(調査によると、定期的に更新するサイトの検索順位は静的サイトより約 30% 高い傾向、週 1〜2 本の記事公開を推奨)、Google Search Console データを監視(どのキーワードがトラフィックをもたらしているか、クリック率の低いページの title と description を最適化、クロールエラーを確認して修正)、ユーザーの検索キーワードを分析(どんな語句でサイトにたどり着いているかを把握し、新コンテンツ作成や既存記事の最適化に活かす)。パフォーマンス最適化も見逃せない。Lighthouse スコア 90 以上が基本要件。画像の遅延読み込み、font-display: swap など、小さな工夫も順位向上に効く。

FAQ

なぜ Astro は SEO に特に向いているのですか?天然の強みは何ですか?
Astro の SEO 上の強み:
• デフォルトで JavaScript ゼロ、静的 HTML を生成
• 検索エンジンのクローラーは純粋な HTML をそのまま読め、JS の実行完了を待つ必要がない

Islands アーキテクチャが特に優れている点:
• ページ主体は静的 HTML、インタラクション部分(「いいね」ボタンなど)だけ JS をロード
• 初回表示が非常に速く、Google のクローラーに好まれる

以前 Next.js を使っていたときは、SSR を有効にしてもバンドルされる JS はかなり大きかった。Astro に移行してから JavaScript サイズは 90% 削減され、Lighthouse スコアは 78 点から 98 点に跳ね上がった。

他フレームワークとの比較:
• Astro はブログ、ドキュメントサイト、マーケティングサイトなどコンテンツ中心のサイト向け。読み込み速度が速く、2025 年のデータでは開発者の使用率が 18% まで増加
• Next.js は管理画面や EC サイトなど、複雑なインタラクションが必要な Web アプリ向け
• Gatsby も静的生成だが、バンドルサイズがやや大きく、ビルド速度も Astro より遅い傾向
Astro サイトのメタタグはどう設定しますか?
基本 3 点セット:
• title(各ページにユニークで説明的なタイトル、50〜60 文字、キーワードを含める)
• description(各ページに説明文、150〜160 文字、クリックを促す内容)
• keywords(Google はほぼ使わないが他の検索エンジンでは使う場合があるため残しておく)

Astro での設定:Layout コンポーネントに Head コンポーネントを追加し、frontmatter から title と description を読み取り、メタタグを動的に生成。

Open Graph タグ:
• og:title(シェア時のタイトル、通常は title と同じ)
• og:description(シェア時の説明、通常は description と同じ)
• og:image(シェア時の画像、1200x630 ピクセル推奨)
• og:url(ページの完全 URL)
• og:type(ページ種別、ブログは article、トップは website)

Twitter Card タグ:
• twitter:card(カード種別、summary_large_image または summary)
• twitter:title(Twitter シェア時のタイトル)
• twitter:description(Twitter シェア時の説明)
• twitter:image(Twitter シェア時の画像)

Astro での設定:title、description、image などを受け取る SEO コンポーネントを作成し、すべての Open Graph と Twitter Card タグを生成、Layout コンポーネントで使用。
Sitemap と robots.txt はどう設定しますか?
Sitemap 統合のインストール:
• npm install @astrojs/sitemap を実行
• astro.config.mjs に sitemap 統合を追加し、site URL を設定

sitemap.xml の自動生成:
• Astro がすべてのページをスキャンし sitemap.xml を生成
• 各ページの URL、最終更新日時、優先度などを含む

robots.txt の作成:
• public ディレクトリに robots.txt を作成
• クローラールールを設定(すべてのクローラーを許可、sitemap の場所を指定)

sitemap の送信:
• Google Search Console にログインし sitemap.xml の URL を送信
• インデックス状況を定期的に確認

Baidu SEO の注意点:
• robots.txt に sitemap-index.xml を書かず、単一の sitemap ファイルパスを指定
• Baidu Webmaster Tools から手動で sitemap を送信
• Baidu は新規サイトの審査が厳しく、インデックスまでの時間は Google より長い傾向
• Baidu は中国語コンテンツの品質とオリジナリティを重視
JSON-LD 構造化データはどう追加しますか?
構造化データが必要な理由:
• 検索結果のリッチさを向上
• 評価、著者、公開日時などを検索結果に表示
• クリック率の向上

よく使う構造化データの種類:
• Article(記事ページ、タイトル、著者、公開日時、カテゴリなど)
• BreadcrumbList(パンくずリスト、サイト構造の理解を助ける)
• Organization(組織情報、ロゴ、連絡先など)

Astro での設定:
• ページ種別に応じた JSON-LD を生成する構造化データコンポーネントを作成
• Layout コンポーネントで使用

構造化データの検証:
• Google リッチリザルトテストで JSON-LD が正しいか確認
• エラーや警告がないかチェック

よくある問題:
• データ形式エラー(JSON-LD 形式が正しいか確認)
• 必須フィールドの欠落(すべての必須フィールドが入力されているか確認)
SEO 最適化のベストプラクティスは?継続的に改善するには?
SEO 最適化のベストプラクティス:
• 各ページにユニークで説明的な title と description を設定
• セマンティック HTML(<article>、<section>、<header> など)を使う
• 画像を最適化(alt 属性、WebP 形式、遅延読み込み)
• URL 構造を最適化(意味のある URL にキーワードを含める)
• 内部リンクを最適化(関連記事リンクでページの重み付けを向上)

継続的な改善の提案:
• コンテンツを定期的に更新(調査によると、定期的に更新するサイトの検索順位は静的サイトより約 30% 高い傾向、週 1〜2 本の記事公開を推奨)
• Google Search Console データを監視(どのキーワードがトラフィックをもたらしているか、クリック率の低いページの title と description を最適化、クロールエラーを確認して修正)
• ユーザーの検索キーワードを分析(どんな語句でサイトにたどり着いているかを把握し、新コンテンツ作成や既存記事の最適化に活かす)

パフォーマンス最適化も見逃せない。Lighthouse スコア 90 以上が基本要件。画像の遅延読み込み、font-display: swap など、小さな工夫も順位向上に効く。
多言語サイトの SEO はどう設定しますか?
多言語対応サイトでは、hreflang タグを追加する必要があります:
• <link rel="alternate" hreflang="zh-CN" href="https://yoursite.com/zh/article" />
• <link rel="alternate" hreflang="en-US" href="https://yoursite.com/en/article" />
• <link rel="alternate" hreflang="x-default" href="https://yoursite.com/en/article" />

x-default でデフォルト言語版を指定。Google が各言語版の関係を正しく認識できます。

各言語版に独立した sitemap を用意し、Google Search Console でそれぞれ送信してください。

8分で読めます · 公開日: 2025年12月2日 · 更新日: 2026年6月8日

関連記事

コメント

GitHubアカウントでログインしてコメントできます