コンテンツへスキップ

AstroブログにJSON-LDを実装してSEO強化する

AstroブログにJSON-LDを実装してSEO強化する方法 のアイキャッチ
Contents

    この記事では、AstroブログにJSON-LDを実装してSEOを強化する方法を解説します。

    この記事でわかること:

    • JSON-LDと構造化データの基礎知識
    • Schema.orgの仕様と使い方
    • Astroでの具体的な実装方法
    • リッチリザルトテストによる検証方法

    JSON-LDとは

    JSON-LD is a lightweight Linked Data format. It is easy for humans to read and write. It is based on the already successful JSON format and provides a way to help JSON data interoperate at Web-scale.

    JSON-LD(JavaScript Object Notation for Linked Data)は、Webページに構造化データを埋め込む手法の一つです。

    構造化データを埋め込むことで、検索エンジンがWebページの内容を適切に理解し、検索結果の質を高めることができます。

    つまり、SEO(検索エンジン最適化)の改善に役立ちます。

    また、埋め込んだ構造化データには、コンテンツのタイトルや説明、画像などのメタデータが含まれるため、ソーシャルメディアでのコンテンツ共有を促進する効果もあります。 さらに、JSON-LDはJSONベースの記述なので、Web開発者にとって親しみやすい形式となっています。 このようにJSON-LDを活用することで、Webサイト全体の可視性とアクセシビリティが向上し、ユーザーへの情報伝達がスムーズになります。

    JSON-LD - JSON for Linked Datajson-ld.org

    Schema.org について

    基本的にJSON-LDで構造化データを検索エンジンなどに提供するに当たっては、Schema.org の仕様に従うのが良いです。

    Schema.orgとは、Google、Microsoft、Yahoo!、Yandexなどの主要な検索エンジンが共同で開発し、ウェブサイトの構造化データマークアップを標準化したものです。

    基本的な概念

    • アイテムスコープ(Itemscope)
      • 構造化データのルート要素を定義します。
    • アイテムタイプ(Itemtype)
      • 構造化データの種類を定義します。
    • アイテムプロパティ(Itemprop)
      • アイテムに関する具体的な情報(名前、説明、画像など)を指定します。

    JSON-LDでは上記を以下の様にJSON形式で記述します。

    schema.json
    {
    "@context": "https://schema.org",
    "@type": "WebSite",
    "name": "フナイログ",
    "url": "https://funailog.com",
    "author": {
    "@type": "Person",
    "name": "Ryota Ikezawa"
    }
    }

    この例では、@context によって、Schema.orgの語彙が使用されていることが宣言されます。 @type によってアイテムの種類がウェブサイトであること、また制作者の名前が指定されています。

    具体的にどのようなスキーマがあるかは、 https://schema.org/docs/schemas.html で確認することが可能です。

    JSON-LDを組み込むためのステップ

    今回はAstro.buildで構築されたこのブログの記事ページに対して、JSON-LDを組み込んでみます。

    これは先に述べたように、ブログ記事の検索性を向上させるための一手段です。 コンポーネントの分離や構成にも寄りますが、記事を描画するコンポーネントの冒頭に以下のようなscriptを書いて外から個別の値を渡すのが良いと思います。

    <script type="application/ld+json">
    {
    "@context": "https://schema.org",
    "@type": "WebSite"
    // ...
    }
    </script>

    あるいは、以下のようにするのも良いでしょう。

    ---
    import { Article, WithContext } from 'schema-dts';
    type Props = {
    jsonLd?: WithContext<Article>;
    };
    const { jsonLd } = Astro.props;
    ---
    <head>
    {
    jsonLd && (
    <script
    is:inline
    type="application/ld+json"
    set:html={JSON.stringify(jsonLd)}
    />
    )
    }
    </head>

    もしも、構成するアプリケーションの構成に問題がなければ、以下のプラグインを利用しても良いかもしれません。

    内部では先ほど記述したものを呼び出しているだけなので、自分で作るのと大差はないです。

    orbit/packages/astro-seo-schema at main · codiume/orbitgithub.com

    一方Schemaの型定義は欲しいと思うので、 schema-dts は利用すべきです。

    再利用性を高めるためにコンポーネントやライブラリとして分割する

    今回は、再利用性を高めるために rich-results.ts の中に ArticleLd として切り出します。

    メタデータとして、blogのコレクション、サイトメタデータ、言語属性などを渡して構成します。

    実際のコードは以下のリンクです。

    funailog/src/lib/rich-results.ts at main · paveg/funailoggithub.com

    ページの構成次第では先に書いた通り、Layout.astro と blogコンテンツのページの2つだけに実装すれば良いでしょう。

    実装したJSON-LDをテストする

    Googleが リッチリザルトテストを提供しています。

    実装してデプロイを行ったあとに、ウェブページをテストして問題ないか確認しましょう。

    Rich Result Test Sample

    まとめ

    JSON-LDを実装することで、検索エンジンにブログの内容を正確に伝えることができます。実装自体は難しくないので、ぜひあなたのブログにも組み込んでみてください。

    実装後は必ずリッチリザルトテストで検証することを忘れずに。

    関連記事

    このブログのSEO改善やAstro実装に関する他の記事も参考にしてください。

    Next.jsからAstroへブログ移行|LightHouseフルスコア達成までの技術選定と実装 | フナイログwww.funailog.com

    X Facebook B! Hatena