この記事では、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形式で記述します。
{ "@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が リッチリザルトテストを提供しています。
実装してデプロイを行ったあとに、ウェブページをテストして問題ないか確認しましょう。

まとめ
JSON-LDを実装することで、検索エンジンにブログの内容を正確に伝えることができます。実装自体は難しくないので、ぜひあなたのブログにも組み込んでみてください。
実装後は必ずリッチリザルトテストで検証することを忘れずに。
関連記事
このブログのSEO改善やAstro実装に関する他の記事も参考にしてください。
Next.jsからAstroへブログ移行|LightHouseフルスコア達成までの技術選定と実装 | フナイログwww.funailog.com