Googleやその他の検索エンジンでの検索結果の表示方法を改善することは、ユーザーをサイトに誘導するために最も重要です。このブログ記事では、SitecoreのSXAを使って、検索結果にレビュースコアを表示する方法をご紹介します。これはどのようにしてビジネスを促進するのでしょうか?また、なぜこのような情報をユーザーに表示するのでしょうか?私の同僚であるMegan Jensenのブログ(こちら)で、その理由を科学的に説明しています。

この「ロード・オブ・ザ・リング」のGoogle検索結果では、星評価のグラフィック、総合評価、平均8.8/10のレビューの総数が表示されています。これらの情報は、Googleが魔法のように引き出してくれるわけではありません。あなたは、Googleが情報を消化できるように、これらのレビュースコアを伝える必要があります。
目次
Schema.NETを使って最終目的を達成する
Schema.orgは、ウェブページで使用するためのさまざまなプロパティを持つ何百ものオブジェクトを作成しています。この構造化されたデータは、GoogleやBingをはじめとする一般的なアプリケーションによって認識されます。これらのアプリケーションが利用できるオブジェクトを作成することで、これらのアプリケーションでのオンラインプレゼンスを高めることができます。Schema.NETは、これらのオブジェクトのC#バージョンを持つ適用可能な.NETライブラリです。このライブラリは、これらのオブジェクトをJSON/JSON-LDにシリアライズするために使用されます。シリアライズ後は、ページの<head>要素にオブジェクトを配置します。このようにして、データはこれらの他のアプリから消費できるようになります。
ステップ1 – Sitecoreでコントローラのレンダリングを作成する

/sitecore/layout/renderingsの下に、上のスクリーンショットのようなコントローラのレンダリングを作成します。私のコントローラは、FeatureレイヤーのMetadataプロジェクトに置かれます。
ステップ 2 – <head>に出力されたパーシャルにレンダリングを追加する

「メタデータ」というタイトルのパーシャルデザインを、/sitecore/content/<your-tenant>/<your-site>/presentation/partial designsの下に作成します。プレゼンテーションの詳細に、ステップ1で新しく作成したレンダリングを追加します。必ず、レイアウトの<head>要素で出力されるプレースホルダーに配置してください。次に、このMetadataパーシャルデザインを、/sitecore/content/<your-tenant>/<your-site>/presentation/page designsの下にあるメタデータを出力したいページデザインアイテムに追加します。
ステップ3 – コントローラ、リポジトリ、モデル、およびビューの設定
NuGet経由でSchema.NETパッケージをインストールします。
public class SchemaMarkupModel
{
public bool HasJsonLd { get; set; }
public string JsonLd { get; set; }
}
そして、JSON-LD文字列のメタデータを格納するために、上記のようなモデルを作成します。
public class SchemaMarkupController : StandardController
{
private readonly IAbstractRepository<SchemaMarkupModel> _schemaMarkupRespository;
public SchemaMarkupController(IAbstractRepository<SchemaMarkupModel> schemaMarkupRepository)
{
_schemaMarkupRespository = schemaMarkupRepository;
}
protected override object GetModel()
{
return _schemaMarkupRespository.GetModel();
}
}
モデルを作成した後、上記のようにコントローラを作成します。ステップ1で作成したコントローラのレンダリングでは、Indexメソッドを呼び出していることを思い出してください。このIndexメソッドは、SXAが提供するオブジェクトであるStandard Controllerにあります。IAbstractRepositoryインターフェイスもSXAが提供しています。先ほど作成したSchemaMarkupModelをハイドレートするためにGetModel()メソッドをオーバーライドすることになります。
public class SchemaMarkupRepository : IAbstractRepository<SchemaMarkupModel>
{
private readonly IContext _context;
public SchemaMarkupRepository(IContext context)
{
_context = context ?? throw new ArgumentNullException(nameof(context));
}
public SchemaMarkupModel GetModel()
{
SchemaMarkupModel model = new SchemaMarkupModel();
model.JsonLd = GetJsonLd(_context.Item);
model.HasJsonLd = !string.IsNullOrEmpty(model.JsonLd);
return model;
}
private string GetJsonLd(Item pageItem)
{
// TO DO: Create JSON-LD for view
}
}
次に、コントローラの GetModel() メソッドの実装に使用するリポジトリを作成する必要があります。上のリポジトリでは IContext を注入する必要があります。これは、現在のページアイテムを取得して、そのページの JSON-LD データをカスタマイズするために使用します。ページアイテムを取得する必要がない場合は、IContext を省略することができます。次のステップでは、GetJsonLD()メソッドを実装します。
@model Feature.Metadata.Models.SchemaMarkupModel
@{
Layout = Sitecore.Configuration.Settings.GetSetting("XA.Foundation.Presentation.MetaComponentLayoutPath", "../SXA/Meta Component Layout.cshtml");
}
@if (Model.HasJsonLd)
{
<script type="application/ld+json">
@Html.Raw(Model.JsonLd)
</script>
}
最後に、作成しているJSON-LDオブジェクトを出力するビューを作成します。このメタデータは、タグの中に出力します。</p>
ステップ4 – Schema.NETオブジェクトの作成とシリアライズ
Googleの検索結果にレーティングを表示するための最後のステップは、前のステップのGetJsonLd()メソッドを実装することです。この実装では、使用するSchema.NETオブジェクトを決定する必要があります。利用可能なオブジェクトの種類については、こちらを参照してください。最初の例に引き続き、2001年の映画「ロード・オブ・ザ・リング」を表すMovieオブジェクトを作成します。
private string GetJsonLd(Item pageItem)
{
Movie lotr = new Movie();
lotr.Name = "The Lord of the Rings: The Fellowship of the Ring";
lotr.AggregateRating = new AggregateRating()
{
ReviewCount = 1679976,
WorstRating = 1.0,
BestRating = 10.0,
RatingValue = 8.8
};
return lotr.ToString();
}
上記のコードは、<head>のページの要素にこれを出力します。
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Movie",
"name": "The Lord of the Rings: The Fellowship of the Ring",
"aggregateRating": {
"@type": "AggregateRating",
"ratingCount": 1679976,
"bestRating": "10.0",
"worstRating": "1.0",
"ratingValue": "8.8"
}
}
</script>
評価を表示するアイテムを表すのに最適なSchema.NETオブジェクトを使用する必要があります。本の評価を表示する場合は、Bookオブジェクトを使用します。特定のオブジェクトが存在しない場合は、汎用のProductオブジェクトを使用します。企業のレーティングを表示する場合は Organizationオブジェクトを使用します。Schema.NETでは、メタデータをマークアップするために様々なオブジェクトを使用することができます。ただし、注意していただきたいのは、ページ上のコンテンツを誤解させるようなメタデータの配置は避けてください。検索エンジンは、ページのコンテンツと一致しない間違ったメタデータを故意または無意識に追加している場合、検索スコアにペナルティを課します。