feat(tradein/browser): на выдачу площадки заходить через настоящий поиск Яндекса, а не голым goto #3258

Merged
lekss361 merged 1 commit from feat/browser-anchor-via-yandex-search into main 2026-08-29 20:28:50 +00:00
Owner

Зачем

Якорная вкладка (#3244) открывает страницу выдачи Домклика без источника перехода вообще. Передача referer на карточку (#3250) воспроизвела второй шаг человеческого пути, но первый — «пришёл из поиска» — так и остался невоспроизведённым:

человек:  yandex.ru → выдача Домклика (Referer https://yandex.ru/) → карточка (Referer = URL выдачи)
было:     (ниоткуда) → выдача Домклика (Referer нет)               → карточка (Referer = URL выдачи)
стало:    yandex.ru → выдача Домклика (переход по клику)           → карточка (Referer = URL выдачи)

Эталон — ручная сессия 29.08 через узел 10 (headful-камуфокс, прод-прокси).

Что сделано

Якорная вкладка идёт на yandex.ru/search/?text=..., ищет среди результатов ссылку на хост origin и кликает по ней. Referer уходит не потому, что мы его подставили, а потому, что переход действительно был.

Поиск ссылки учитывает редирект-обёртки Яндекса (/redir/, yandex.ru/clck/): совпадение проверяется и по href, и по видимому тексту.

Три контролируемых исхода, ни один не роняет прогон

ситуация что делаем referer
капча на выдаче Яндекса, либо навигация на Яндекс упала прежний прямой goto(origin) нет — поведение до правки байт в байт
ссылки на хост в результатах нет goto(origin) https://yandex.ru/ — визит был настоящий
клик увёл не туда (редирект-обёртка) goto(origin) точный URL выдачи, а не общий yandex.ru

Капча здесь не гипотетическая: на ya.ru через мобильный прокси она наблюдалась вживую этой же сессией.

Область действия

Включено только для ДомкликаBROWSER_ANCHOR_VIA_SEARCH=domclick по умолчанию. Авито, Циан и Яндекс не трогаем, их проверять отдельно по #3251. Пустое значение переменной возвращает сегодняшнее поведение целиком, без единой лишней навигации.

Запрос настраивается через BROWSER_ANCHOR_SEARCH_QUERY_{PROVIDER}; код-дефолт для Домклика — «домклик екатеринбург квартиры вторичка».

Известное ограничение

Ссылки в выдаче Яндекса часто открываются в новой вкладке (target="_blank"). Тогда якорная страница остаётся на Яндексе, срабатывает проверка хоста и мы уходим в третью ветку — goto(origin) с referer на URL выдачи. Результат корректный и заголовок честный, но настоящего клика-перехода в этом случае не происходит. После деплоя стоит посмотреть по логу, какая из веток срабатывает в реальности, и при необходимости добавить перехват новой вкладки.

Тесты

196 passed в сайдкаре против 191: успешный клик по результату; откат по капче; откат при отсутствии ссылки; провайдер вне списка (поиска нет вовсе); падение навигации на Яндекс. ruff check чист.

Важно про измерение эффекта

Прогон добора сразу после деплоя #3250 дал enriched=0, blocked=3 против enriched=10, blocked=3 до него, но приписывать это правке нельзя: контейнер был холодный после рестарта, а очередь начиналась ровно с тех карточек, на которых умер предыдущий прогон. Причина не установлена. При оценке этой правки мерить надо так же осторожно — с прогретым контекстом и на сопоставимой выборке, иначе снова получится измерение порядка проб, а не гипотезы.

Связано

#3244, #3250, #3251, #3246.

## Зачем Якорная вкладка (#3244) открывает страницу выдачи Домклика **без источника перехода вообще**. Передача `referer` на карточку (#3250) воспроизвела второй шаг человеческого пути, но первый — «пришёл из поиска» — так и остался невоспроизведённым: ``` человек: yandex.ru → выдача Домклика (Referer https://yandex.ru/) → карточка (Referer = URL выдачи) было: (ниоткуда) → выдача Домклика (Referer нет) → карточка (Referer = URL выдачи) стало: yandex.ru → выдача Домклика (переход по клику) → карточка (Referer = URL выдачи) ``` Эталон — ручная сессия 29.08 через узел 10 (headful-камуфокс, прод-прокси). ## Что сделано Якорная вкладка идёт на `yandex.ru/search/?text=...`, ищет среди результатов ссылку на хост origin и **кликает по ней**. `Referer` уходит не потому, что мы его подставили, а потому, что переход действительно был. Поиск ссылки учитывает редирект-обёртки Яндекса (`/redir/`, `yandex.ru/clck/`): совпадение проверяется и по `href`, и по видимому тексту. ## Три контролируемых исхода, ни один не роняет прогон | ситуация | что делаем | referer | |---|---|---| | капча на выдаче Яндекса, либо навигация на Яндекс упала | прежний прямой `goto(origin)` | нет — поведение до правки байт в байт | | ссылки на хост в результатах нет | `goto(origin)` | `https://yandex.ru/` — визит был настоящий | | клик увёл не туда (редирект-обёртка) | `goto(origin)` | точный URL выдачи, а не общий `yandex.ru` | Капча здесь не гипотетическая: на `ya.ru` через мобильный прокси она наблюдалась вживую этой же сессией. ## Область действия Включено **только для Домклика** — `BROWSER_ANCHOR_VIA_SEARCH=domclick` по умолчанию. Авито, Циан и Яндекс не трогаем, их проверять отдельно по #3251. Пустое значение переменной возвращает сегодняшнее поведение целиком, без единой лишней навигации. Запрос настраивается через `BROWSER_ANCHOR_SEARCH_QUERY_{PROVIDER}`; код-дефолт для Домклика — «домклик екатеринбург квартиры вторичка». ## Известное ограничение Ссылки в выдаче Яндекса часто открываются в новой вкладке (`target="_blank"`). Тогда якорная страница остаётся на Яндексе, срабатывает проверка хоста и мы уходим в третью ветку — `goto(origin)` с referer на URL выдачи. Результат корректный и заголовок честный, но настоящего клика-перехода в этом случае не происходит. После деплоя стоит посмотреть по логу, какая из веток срабатывает в реальности, и при необходимости добавить перехват новой вкладки. ## Тесты **196 passed** в сайдкаре против 191: успешный клик по результату; откат по капче; откат при отсутствии ссылки; провайдер вне списка (поиска нет вовсе); падение навигации на Яндекс. `ruff check` чист. ## Важно про измерение эффекта Прогон добора сразу после деплоя #3250 дал `enriched=0, blocked=3` против `enriched=10, blocked=3` до него, но **приписывать это правке нельзя**: контейнер был холодный после рестарта, а очередь начиналась ровно с тех карточек, на которых умер предыдущий прогон. Причина не установлена. При оценке этой правки мерить надо так же осторожно — с прогретым контекстом и на сопоставимой выборке, иначе снова получится измерение порядка проб, а не гипотезы. ## Связано #3244, #3250, #3251, #3246.
lekss361 added 1 commit 2026-08-29 20:26:54 +00:00
feat(tradein/browser): на выдачу площадки заходить через настоящий поиск Яндекса, а не голым goto
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Successful in 1m27s
a107ab9950
Якорная вкладка (#3244) открывала страницу выдачи Домклика без источника
перехода вообще. Передача referer на карточку (#3250) воспроизвела второй шаг
человеческого пути, но первый — «пришёл из поиска» — оставался невоспроизведённым.

Эталон — ручная сессия 29.08 через узел 10:
    yandex.ru → клик по результату → выдача Домклика (Referer https://yandex.ru/)
    → клик → карточка (Referer = URL выдачи)

Теперь якорная вкладка идёт на yandex.ru/search, ищет среди результатов ссылку на
хост origin и КЛИКАЕТ по ней. Referer уходит не потому, что мы его подставили, а
потому, что переход действительно был.

Яндекс на мобильных прокси капризен — наблюдалась капча вживую, — поэтому
предусмотрены три контролируемых исхода, и ни один не роняет прогон:
  - капча на выдаче либо упавшая навигация на Яндекс → прежний прямой goto(origin),
    без referer, поведение до этой правки байт в байт;
  - ссылки на хост в результатах нет → goto(origin, referer="https://yandex.ru/"):
    визит на Яндекс был настоящий, заголовок честный;
  - клик увёл не туда (редирект-обёртка Яндекса) → goto(origin, referer=URL выдачи),
    точный адрес, а не общий yandex.ru.

Включено ТОЛЬКО для Домклика (BROWSER_ANCHOR_VIA_SEARCH=domclick по умолчанию);
Авито, Циан и Яндекс не трогаем — их проверять отдельно по #3251. Пустое значение
переменной возвращает сегодняшнее поведение целиком.

Тесты: 196 passed в сайдкаре против 191 — пять сценариев: успешный клик, откат по
капче, откат по отсутствию ссылки, провайдер вне списка, падение навигации.
lekss361 merged commit 35ff431c48 into main 2026-08-29 20:28:50 +00:00
lekss361 deleted branch feat/browser-anchor-via-yandex-search 2026-08-29 20:28:51 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3258
No description provided.