Утечка исходного кода поиска Яндекса - теперь нам достоверно известны все факторы ранжирования сайтов

Приветствую! Давеча пользователи форума Hacker News сообщили о великолепной находке - исходные коды сервисов Яндекса почти на 45 GB.

Представители Яндекса уже подтвердили слив данных, так что это не фейк и не розыгрыш. Все папки внутри архива датируются 24.02.2022, но некоторые логи созданы в мае. Видимо, кто-то решил прихватить с собой флешку с ценной информацией перед увольнением :)

В скаченном архиве много папок, но меня заинтересовали следующие: antirobot, captcha, extsearch, kernel, metrika, robot, search, wmconsole.

Бегло проанализировав содержимое можно констатировать факт, что был слит полный репозиторий Search Engine and Indexing Bot.

В папке kernel.tar\web_factors_info\ лежит файл с 1923 факторами ранжирования Яндекса, включая TG_DEPRECATED (устаревшие, некоторые из них ссылаются на обновленную версию). Вот несколько интересные из них:

Factor { Index: 42 CppName: "FI_IS_MAIN_PAGE" Name: "IsMainPage" Tags: [TG_DOC, TG_STATIC, TG_BINARY, TG_REARR_USE, TG_UNDOCUMENTED, TG_OFTEN_ZERO, TG_L2, TG_NN_OVER_FEATURES_USE] Description: "Если главная страница владельца (чаще всего домен второго уровня, например xxxx.ru), то фактор равен 1. Для бомжатников, хостингов, личных блогов и т.д. (например, лайфджорнал, народ.ру и пр.) - домены третьего уровня (типа xxxxx.narod.ru) так же будут иметь фактор равный 1." Authors: ["aalekseev", "denplusplus"] Responsibles: "alsafr" } Factor { Index: 1908 CppName: "FI_RANDOM_COMMERCIAL" Name: "RandomCommercial" Tags: [TG_OWNER, TG_STATIC, TG_OFTEN_ZERO, TG_META, TG_DATA_FROM_SAASKV, TG_UNUSED, TG_NOT_01] Description: "'Случайный' фактор для коммерческих сайтов." Wiki: "https://wiki.yandex-team.ru/jandekspoisk/kachestvopoiska/relevance/web/factors/RandComm/" Ticket: "SEARCHSPAM-14815" Authors: ["tyamgin"] Responsibles: ["tyamgin", "ashagarov", "sdormidontov"] ImplementationTime: "2020-03-11" MinValue: -1.0 } Factor { Index: 1895 CppName: "FI_HOST_BIZ_KERNEL_PERCENTILE" Name: "HostBizKernelPercentile" Ticket: "SEARCHSPAM-14593" Wiki: "https://wiki.yandex-team.ru/JandeksPoisk/Antispam/biz-kernel-basic-description/" Tags: [TG_USER, TG_HOST, TG_STATIC, TG_L2, TG_UNUSED] Description: "Показатель качества сайта с точки зрения факторов про пользовательское поведение, агрегированных до владельцев." Authors: ["ashagarov"] Responsibles: ["ashagarov", "sdormidontov"] ImplementationTime: "2019-08-28" } Factor { Index: 705 CppName: "FI_DOC_CREATE_MONTH" Name: "DocCreateMonth" Ticket: "BUKI-1583" Wiki: "http://wiki.yandex-team.ru/JandeksPoisk/KachestvoPoiska/ObshayaFormula/TekushhieKomponenty/DocMonthFactors" Tags: [TG_DATE, TG_DOC, TG_DOC_TEXT, TG_STATIC, TG_DEPRECATED, TG_UNDOCUMENTED, TG_L2] Description: "Время создания документа с точностью до месяца 1.0 -- текущий месяц, 0 —- 10 лет назад и старше. Временно отключен" Authors: "bochkarev" Responsibles: "bochkarev" } Factor { Index: 6 CppName: "FI_LINK_RELEV_ALL_WORDS" Name: "LRp1" Group: "Dynamic" Tags: [TG_DOC, TG_DYNAMIC, TG_LINK_TEXT, TG_UNDOCUMENTED, TG_DEPRECATED] Description: "(strict) есть все слова запроса в одном линке." Authors: ["gulin", "leo"] Responsibles: ["gulin", "leo"] }

Как видно, есть описание алгоритмов рандомизации в коммерческой выдаче, а также много алгоритмов по поведенческим факторам ранжирования.

На самом деле, я ожидал увидеть код типа:

if ($pageOwner == yandex) {$rank = 1} else {$rank = rand()}

В некоторых случаях оно так и есть :)

Кроме того, был обнаружен файл с 318 факторами того, как Яндекс делает аналитику по запросам и затем по полученным данным ранжирует сайты, например:

Factor { Index: 4 CppName: "FI_Q_DIVERSITY" Name: "QDiversity" Ticket: "FRESHNESS-3225" Tags: [TG_DYNAMIC, TG_QUERY_ONLY, TG_USER, TG_USER_SEARCH, TG_USER_SEARCH_ONLY, TG_REARR_USE, TG_OFTEN_ZERO, TG_L2] Description: "Степень централизации точек, из которой задается запрос" Authors: "denplusplus" Responsibles: ["diver", "akhropov"] MoveFromFactorSource: { Sources: { ClassName: "NBg::NProto::TQueryFactors", Arg: "source" }, Expression: "source.GetQDiversity()" } DependsOn: [{Feature: ["QDiversity"], Slice: "begemot_query_factors"}] } Factor { Index: 5 CppName: "FI_Q_DIVERSITY2" Name: "Diversity2" Ticket: "FRESHNESS-3225" Tags: [TG_DYNAMIC, TG_QUERY_ONLY, TG_USER, TG_USER_SEARCH, TG_USER_SEARCH_ONLY, TG_REARR_USE, TG_OFTEN_ZERO, TG_L2] Description: "Географическая распределенность запроса" Authors: "denplusplus" Responsibles: ["diver", "akhropov"] MoveFromFactorSource: { Sources: { ClassName: "NBg::NProto::TQueryFactors", Arg: "source" }, Expression: "source.GetDiversity2()" } DependsOn: [{Feature: ["Diversity2"], Slice: "begemot_query_factors"}] } Factor { Index: 6 CppName: "FI_HOUR_DIVERSITY" Name: "HourDiversity" Ticket: "FRESHNESS-3225" Tags: [TG_DYNAMIC, TG_QUERY_ONLY, TG_USER, TG_USER_SEARCH, TG_USER_SEARCH_ONLY, TG_REARR_USE, TG_OFTEN_ZERO, TG_L2] Description: "Степень выраженности задания запросов в разное время суток" Authors: "denplusplus" Responsibles: ["diver", "akhropov"] MoveFromFactorSource: { Sources: { ClassName: "NBg::NProto::TQueryFactors", Arg: "source" }, Expression: "source.GetHourDiversity()" } DependsOn: [{Feature: ["HourDiversity"], Slice: "begemot_query_factors"}] } Factor { Index: 60 CppName: "FI_DIVERSITY_CATEG_NEED_MAP" Name: "DiversityCategNeedMap" Ticket: "BUKI-1213" Tags: [TG_DYNAMIC, TG_QUERY_ONLY, TG_THEME_CLASSIF, TG_UNDOCUMENTED, TG_L2] Description: "0 или 1 в зависимости от наличия в запросе явно выраженного интента need_map из разнообразия" Authors: "stasd07" Responsibles: "stasd07" MoveFromFactorSource: { Sources: { ClassName: "NBg::NProto::TQueryFactors", Arg: "source" }, Expression: "source.GetDiversityCategNeedMap()" } DependsOn: [{Feature: ["DiversityCategNeedMap"], Slice: "begemot_query_factors"}] }

Скачать полный файл с факторами ранжирования можно в моем GitHub.

Скачать полный архив с исходным кодом можно по magnet-ссылке:

magnet:?xt=urn:btih:7e0ac90b489baee8a823381792ec67d465488fef&dn=yandexarc&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2920&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969&tr=udp%3A%2F%2Fbt1.archive.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fbt2.archive.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337%2Fannounce

Теперь нас ждет множество часов изучения данных, как на самом деле работают сервисы Яндекса, развенчание множества заблуждений, мифов и легенд, связанных с SEO, и корректировка стратегии продвижения проектов.

Помимо факторов ранжирования занятно посмотреть как технически настроено цензурирование контента в новостях и поиске, какой код отвечает за увеличение цены в Маркете, если заходишь с устройства Apple, почему в такси у тебя постоянно «Повышенный спрос», что записывает «Умная колонка Яндекса», и еще много чего.

Погнали изучать! :)

Другие статьи:

3131
16 комментариев

Как про ПФ чего-нить ценного накопаешь, разбуди.

4
Ответить

Сам не копал, но из того что пишут: долгосрочные интересы рулят, канвас и пасивные принты не учитываются.

Ответить

Так и предчувствую скоро новые курсы по SEO на основе слитых данных из Яндекса.

2
Ответить

:)
Есть ли там что-то принципиально новое?
Трактовка может быть разной, поэтому курсы вероятны.

Ответить

актуальность факторов конечно под вопросом, особенно это отчетливо понимаешь под упоминаниями о народ.ру, Яндекс-Каталог, DMOZ... последние 2 сервиса закрылись в 2017 году...

1
Ответить

За магнет ссылку просто ❤❤❤

1
Ответить