Если вы внедряете поиск и навигацию (он же нахождение), но не можете использовать «унифицированный поиск», вам необходимо будет реализовать свое собственное отслеживание на стороне сервера. Существует ряд блогов, которые затрагивают эту тему, но многие устарели, и ни один из них не захватывает 100% требований.
Если вы не получите все правильно, вполне вероятно, что вы увидите все нули для «скорости кликов» в CMS:
Следующее поможет любому, кому нужно обслуживать:
-
Многосайтные настройки
-
Точная отчетность по «самым частым поискам»
-
Точная отчетность по «поискам без ударов»
-
Точная отчетность по «поискам без соответствующих ударов»
-
Точная отчетность ‘Люди, которые искали ‘Фу‘Также искал…‘
Обратите внимание, я понимаю, что поиск и навигация вроде ‘ по выходу (В пользу графика) Но, надеюсь, это все равно будет иметь некоторое использование.
Обзор
Такой подход:
-
Захватывает и подчиняет поисковый запрос
-
Зажигает «событие трека» для запроса
-
Добавляет информацию о отслеживании (из события трека) к каждому URL -адресу результата поиска
-
Когда результат поиска нажимается, это запускает событие по маршруту отслеживания – /Go.
-
Информация о отслеживании читается из параметров запроса
-
Событие отслеживания запускается для события Click, передающего параметры запроса
-
Запрос перенаправлен на страницу результатов поиска
Получить результат поиска
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. Это проблема в многовестных экземплярах. Каким -то образом, когда вы оцениваете теги из действия команды, идентификатор сайта всегда разрешается на веб -сайте с доменом подстановочного знака. Рассмотрим это, если у вас есть несколько сайтов, разделяющих один и тот же код поиска.
-
C.ID = new TrackContext (). ID; – Это используется для установки идентификатора для пользователя – необходимо определить, какие аналогичные пользователи также искали и на что они нажали – это может быть выявлено через _searchclient.statistics () ?. getDyoumeanasync ()
Добавить информацию о отслеживании в URL -адреса результата
var trackedUrls = new List();
var resultList = searchResult.Hits.ToList();
for (int x = 0; x < resultList.Count; x ++)
{
var trackedUrl = $"https://www.mysite.com/" +
$"?query={System.Web.HttpUtility.UrlEncode(query)}" +
$"&trackid={trackResult.TrackId}" +
$"&hitid={resultList[x].Id}" +
$"&hittype={resultList[x].Type}" +
$"&trackuuid={trackResult.TrackUUId}" +
$"&trackhitpos={x +1}" +
$"&page="{resultList[x].Document.LinkURL};
trackedUrls.Add(trackedUrl);
}
Пример:
Что следует отметить:
Отслеживание кликов / хитов
[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» здесь, мы реализуем стратегию «огня и самого»; Мы не ждем, что отслеживание достигнет успеха, прежде чем перенаправить пользователя-это улучшает производительность / пользовательский опыт. Другие/лучшие способы решения этой проблемы могут быть через фоновую службу или очередь. Некоторая обработка ошибок и регистрация также была бы хорошей идеей.
Со всем этим вы должны увидеть правильную статистику, которая начинает катиться.

GOTCHAS:
-
Обрезать и строить термин поиска, чтобы предотвратить отслеживание различных запросов и щелчков для эффективного одного и того же
-
Браузеры на основе хрома могут предварительно предварительно предназначать ссылки на вашей странице через API правил спекуляций. Это может привести к тому, что отслеживание щелчка будет запущено, даже если пользователь не нажимает на результат – предложите вам отключить это на странице результатов поиска.
-
Боты также могут ползти на вашей странице и зарегистрировать клики. Одним из способов обойти это может быть только отслеживать запросы, где домен рефералов является вашим собственным сайтом.
-
Пользователи, которые нажимают «обратно» через браузер, запустили второй запрос и искажают результат – чтобы обойти это, вы можете кэшировать результат для запроса на основе уникального ключа для запроса и пользователя –
var cachekey = new TrackContext (). id + request.queryString + request.host;
21 июля 2025 года
По теме
