1753920676
2025-07-21 06:50:00
Search&Navigation(別名FIND)を実装しているが、「Unified Search」を使用できない場合は、独自のサーバー側の追跡を実装する必要があります。このテーマに触れるブログはたくさんありますが、多くは時代遅れであり、要件の100%をキャプチャするものはないようです。
すべてが正しいとわからない場合は、CMSの「クリックスルーレート」のすべてのゼロが表示される可能性があります。
以下は、対応する必要がある人に役立ちます。
-
マルチサイトセットアップ
-
「最も頻繁な検索」に関する正確なレポート
-
「ヒットなしの検索」に関する正確なレポート
-
「関連するヒットなしの検索」に関する正確なレポート
-
正確なレポート ‘探した人」foo‘も検索しました…‘
注意してください、私は検索とナビゲーションがちょっとしたことであることを理解しています ‘ 途中 (グラフを支持して)しかし、うまくいけば、これはまだいくつかの使用になるでしょう。
概要
このアプローチ:
-
検索クエリをキャプチャして提出します
-
クエリに「トラックイベント」を起動します
-
[トラックイベントから)追跡情報を各検索結果URLに追加します
-
検索結果がクリックされると、これによりトラッキングルートにイベントが発生します – /go。
-
追跡情報は、クエリパラメーターから読み取られます
-
クエリパラメーターを通過するクリックイベントのために追跡イベントが起動されます
-
リクエストは、検索結果ページにリダイレクトされます
検索結果を取得します
var searchResult = await ServiceLocator.Current.GetInstance()
.Search(“en”)
.For(“foo”)
.Take(20)
.GetResultAsync();
クエリを追跡します
var tags = _tagsHelper.GetTags(false).ToList();
var trackResult = await ServiceLocator.Current.GetInstance().Statistics().TrackQueryAsync(query.Query.ToLower(), c =>
{
c.Id = new TrackContext().Id;
c.Query.Hits = searchResult.TotalMatching;
// c.Tags = _tagsHelper.GetTags(false).ToList(); -- don't do this here!
c.Tags = tags;
}));
注意すべきこと:
-
タグ 現在のサイト、言語、カテゴリをキャプチャします
-
TrackQueryasyncのコマンドアクション内のタグを評価しないでください。これは、マルチサイトのインスタンスでは問題です。どういうわけか、コマンドアクション内からタグを評価すると、サイトIDは常にワイルドカードドメインを使用してWebサイトに解決されます。同じ検索コードを共有する複数のサイトがある場合は、これを考えてください。
-
c.id = new TrackContext()。id; – これは、ユーザーのIDを設定するために使用されます – 同様のユーザーが検索したものとクリックしたものを決定するために必要です。
結果URLに追跡情報を追加します
var trackedUrls = new List();
var resultList = searchResult.Hits.ToList();
for (int x = 0; x
例:
注意すべきこと:
クリック /ヒットを追跡します
[HttpGet]
[Route("go")]
public async Task Go(
[FromQuery] string query,
[FromQuery] string trackid,
[FromQuery] string hitid,
[FromQuery] string hittype,
[FromQuery] string trackuuid,
[FromQuery] string trackhitpos,
[FromQuery] string page)
{
Task.Run(async () =>
{
var locator = ServiceLocator.Current;
var hitIdFormatted = $"{hittype}/{hitid}";
var tags = locator.GetInstance().GetTags(false).ToList();
await locator.GetInstance().Statistics().TrackHitAsync(
queryString: query,
hitId: hitIdFormatted,
command =>
{
command.Id = trackid;
command.Hit.Id = hitIdFormatted;
command.Tags = tags;
command.Hit.QueryString = System.Web.HttpUtility.UrlDecode(query ?? string.Empty);
command.Hit.Position = int.TryParse(trackhitpos ?? "0", out var pos) ? pos : 0;
command.AdditionalParameters = new AttributeDictionary() { { Uuid, trackuuid } };
});
});
return this.Redirect(page);
}
注意すべきこと:
-
ここで「task.run」を利用することにより、「火と焦点」戦略を実装しています。ユーザーをリダイレクトする前に追跡が成功するのを待つことはありません。これにより、パフォーマンス /ユーザーの経験が向上します。この問題に取り組む他の/より良い方法は、バックグラウンドサービスまたはキューを介して行うことができます。いくつかのエラー処理とロギングも良い考えです。
これらすべてが整っていれば、正しい統計がロールインし始めているのを見る必要があります。

ゴッチャス:
-
さまざまなクエリとクリックの追跡を防ぐために検索用語をトリミングして下ろして、効果的に同じことをしてください
-
Chromiumベースのブラウザは、推測ルールAPIを介してページ上のプレレンダーリンクを使用できます。これにより、ユーザーが結果をクリックしなくても、[追跡]をクリックすることができます。これを検索結果ページで無効にすることをお勧めします。
-
ボットはページをcraうたり、クリックを登録することもできます。これをめぐる1つの方法は、リファラードメインが独自のサイトである場合にのみリクエストを追跡することです。
-
ブラウザを介して「バック」をクリックするユーザーは、2回目のクエリをトリガーし、結果を歪めます。これを回避するために、リクエストとユーザーの一意のキーに基づいてクエリの結果をキャッシュできます –
var cachekey = new TrackContext()。id + request.querystring + request.host;
2025年7月21日
#検索とナビゲーション #追跡をクリックします