Содержание

Два привычных способа снять позиции в Google перестали работать. С начала 2025 года Google не отдаёт выдачу без JavaScript, и скрипт, который запрашивает google.com/search и разбирает HTML, вместо результатов получает требование включить JavaScript. А Custom Search JSON API, на котором держались рецепты «позиции через официальный API», закрыт для новых клиентов. Тем, кто подключился раньше, Google оставил время до 1 января 2027 года. Остаются три способа: Search Console API для своего сайта, SERP-API и браузер с изменённым отпечатком для любого сайта и города. Ниже скрипт, который умеет все три, и сверка двух выдачных источников на одном наборе запросов.

Я проверил, что лежит в открытом доступе. Самый популярный трекер позиций на Python на GitHub (306 звёзд на 28 октября 2026 года) запрашивает google.com напрямую через requests и ищет блоки выдачи по CSS-классам yuRUbf и P8ujBc, его последний коммит сделан в январе 2024 года. Второй по заметности тоже обращается к google.com напрямую, только через библиотеку RoboBrowser, и заброшен с 2022-го. Подборка «скриптов для SEO на 2026 год» от хостинг-провайдера, вышедшая в январе, по-прежнему советует прямой парсинг с паузой между запросами.

Поэтому я собрал свой скрипт и выкладываю его целиком.

Что именно закрывает Google

Закрывается не один API, а вся веб-часть Programmable Search Engine. План Google объявил в блоге продукта , срок перехода один для всех — 1 января 2027 года.

Что закрывает Google в Programmable Search Engine, в какие сроки и чем предлагает заменить
ПродуктЧто происходитЧем Google предлагает заменить
Custom Search JSON APIНовым клиентам недоступен. У подключённых раньше работает до 1 января 2027 года: 100 запросов в день бесплатно, дальше $5 за 1000, не больше 10 000 в деньПоиск по 50 доменам и меньше — Vertex AI Search. Вся веб-выдача — отдельный продукт по заявке, цена по запросу
Режим «Search the entire web» в Programmable Search EngineНовые поисковые системы создаются только со списком сайтов. Созданные раньше ищут по всему вебу до 1 января 2027 годаТот же продукт по заявке
Поиск по своим сайтам (Search Element, «Sites to search»)Остаётся бесплатным, до 50 доменовЗамена не нужна

Цены в первой строке взяты со страницы API, и Google оговаривает, что они касаются только тех, кто подключился раньше. Для проверки позиций ни одна замена не подходит. Vertex AI Search ищет только по заданным доменам, до 50, и по вашим данным, а места сайта в google.com не показывает. Решение для полной веб-выдачи, которое Google называет full web search solution, доступно по заявке, публичной цены у него нет.

При этом Custom Search и раньше не повторял обычную выдачу. В справке Google сказано, что поисковая система, настроенная на весь веб, ищет по части индекса Google Web Search, поднимает выше сайты владельца и не показывает блоки вроде Onebox, свежие результаты и персонализацию. За одно обращение API отдавал до 10 результатов и не больше 100 на запрос. Рецепт «позиции через официальный API» мерил место сайта в соседнем поиске, а не в том, который видит пользователь.

Откуда теперь брать позиции

Рабочих источников три, и они отвечают на разные вопросы.

Сравнение Search Console API, SERP API и браузера как источников позиций в Google
ПараметрSearch Console APISERP APIБраузер
Чьи позициитолько подтверждённого сайталюбого сайта, включая конкурентовлюбого сайта
Какие запросытолько те, по которым сайт уже показывалсялюбыелюбые
Что за числосредняя позиция за периодпозиция в одном снимке выдачипозиция в одном снимке выдачи
Регионсрез по странамзадаётся в запросе, вплоть до городазадаётся параметром uule, вплоть до города
Ценабесплатноза каждый запросбесплатно, но только для небольших объёмов
Главный рискмолчит там, где сайта нет в выдачезависимость от стороннего сервисакапча и правила Google

Search Console честнее всех описывает реальность, но молчит там, где сайт не показывается. А проверить обычно нужно именно такие запросы.

SERP API, то есть сервис, который сам снимает выдачу и отдаёт её в машинном формате, видит любой запрос в любом городе. В скрипте это XMLRiver. У него есть выдача Google и Яндекса и справочник регионов до уровня города, а базовый тариф без предоплаты стоит 25 ₽ за 1000 запросов, или 2,5 копейки за страницу выдачи. Браузер бесплатен, но работает не любой.

Какой браузер пускает Google

Обычный Chromium под управлением Playwright получил у меня капчу на первом же запросе, причём и в фоновом режиме, и в видимом окне. Ту же картину показал независимый тест Иэна Патерсона (май 2026, обновлён в августе). Из шести браузеров для автоматизации, которые он проверял, выдачу Google отдали только трём: CloakBrowser, nodriver и Camoufox. Patchright, rebrowser и обычный Playwright получили блокировку. Тест снят за одну ночь с одного домашнего IP, поэтому я считаю его свидетельством, а не гарантией.

Скрипт использует CloakBrowser. Это Chromium, у которого отпечаток изменён на уровне исходного кода, с Python-обёрткой под лицензией MIT и тем же API, что у Playwright. Сам браузер скачивается готовым бинарником в бесплатной или платной версии Pro. На двух рабочих прогонах, в 21 и 15 запросов, он обратился к Google 36 раз подряд без капчи, а пробный прогон до этого упёрся в капчу на восьмом запросе. По моей оценке, этого хватит на десятки запросов в день, но не на мониторинг тысяч ключей.

Без двух деталей браузерный режим врёт.

Google теперь заворачивает ссылки результатов в /goto?url= с зашифрованным адресом. Скрипт, который берёт домен из href, видит в выдаче одни адреса Google и не находит ничего. Поэтому домен берётся из строки адреса над заголовком, а полный URL восстанавливается запросом к редиректу, и только для найденной страницы сайта.

Вторая деталь касается капчи. После неё продолжать бессмысленно, поэтому скрипт останавливается и помечает оставшиеся запросы как пропущенные, а не записывает их в «сайта нет в выдаче».

У браузерного режима есть и юридическая сторона. Google подал в суд на SerpApi за обход защитных мер поисковой выдачи. Проверять позиции своего сайта раз в день и перепродавать выдачу — разные вещи. Но robots.txt Google закрывает раздел /search для всех роботов, и решение о таком режиме каждый принимает сам.

Что делает скрипт

Режим XMLRiver работает на стандартной библиотеке Python 3.9+. Для Search Console нужен google-auth, для браузера нужен cloakbrowser. В самом скрипте нет ни одного ключа и ни одного адреса. ID и ключ XMLRiver, ресурс Search Console и путь к JSON-ключу вписываются в файл .env, образец которого лежит рядом. Пошаговая настройка каждого источника, включая создание сервисного аккаунта Google, описана в README к скрипту.

bash
# XMLRiver: сначала посчитать запросы и стоимость, потом Москва, google.ru, ТОП-30
python google_positions.py -k keywords.txt -s example.ru --pages 3 --dry-run
python google_positions.py -k keywords.txt -s example.ru \
  --loc 1011969 --lang ru --gdomain 143 --pages 3

# Search Console: ресурс и ключ берутся из .env, средняя позиция за 28 дней по России
python google_positions.py -k keywords.txt -s example.ru --source gsc --gsc-country rus

# Браузер: Москва, ТОП-20, пауза 8–14 секунд между страницами
python google_positions.py -k keywords.txt -s example.ru --source browser \
  --city "Moscow,Moscow,Russia" --lang ru --gl ru --pages 2

Регион в XMLRiver задаётся числовым кодом из справочника xmlriver.com/files/geo.csv. В браузере нужно каноническое имя места из третьей колонки того же файла, например Moscow,Moscow,Russia. Ни то ни другое нельзя угадывать. У меня в рабочих заметках какое-то время стоял код, который выглядел как Москва, а при сверке со справочником оказался аргентинским городом Кампана. Выдача по нему собиралась без ошибок и выглядела правдоподобно. Поэтому код города после настройки стоит сверить со справочником и записать в отчёт рядом с цифрами.

Проверка на нейтральных запросах

я прогнал скрипт двумя выдачными источниками, XMLRiver и браузером, на одном наборе. Сайт ru.wikipedia.org, Москва, десктоп, google.ru, глубина 30.

Первым идёт контроль, то есть запрос, по которому сайт гарантированно первый. Для Википедии это «википедия», и оба источника поставили её на первое место. Пока контроль не прошёл, пустой результат по остальным запросам ничего не значит. Ровное «сайта нет в выдаче» по всему списку чаще выдаёт неверный домен или регион, чем реальную картину.

Затем шли шесть запросов разного типа.

Позиции ru.wikipedia.org по шести запросам в XMLRiver и браузере и первые домены выдачи
ЗапросXMLRiverБраузерПервые домены выдачи
фотосинтез11ru.wikipedia.org, затем образовательные и научные сайты
теорема пифагора11ru.wikipedia.org
рецепт борщавне ТОП-30вне ТОП-30andychef.ru, russianfood.com
как выбрать велосипедвне ТОП-30вне ТОП-30velostrana.ru, pro-bike.ru
ремонт стиральной машинывне ТОП-30вне ТОП-30profi.ru, moskva.remontgis.ru
купить ноутбуквне ТОП-30вне ТОП-30technopark.ru, store77.net

Позиции совпали по всем семи запросам, первый домен выдачи тоже совпал. Второй и третий кое-где разошлись. По «фотосинтезу» в одном снимке на втором месте стоял biocpm.ru, в другом externat.foxford.ru. Снимки сняты разными способами с разницей в несколько минут, и первые места в них оказались устойчивее следующих.

XMLRiver потратил 15 обращений, около 38 копеек по базовому тарифу. Браузер сделал 15 запросов к Google без капчи. Экономия видна по числу обращений, ведь там, где сайт нашёлся на первой странице, скрипт дальше не листал.

Search Console на чужом сайте показать нельзя, он работает только для подтверждённых ресурсов. На своём сайте он отвечает на другой вопрос и показывает среднюю позицию за месяц по запросам, где сайт уже показывался. Сравнивать это число со снимком напрямую нельзя. Если они расходятся в разы, я первым делом проверяю регион и устройство, с которыми снят снимок.

Чего скрипт не показывает

Когда скрипт не нужен

Скрипт нужен не всем. Если нужны ежедневные позиции по списку запросов в обычных городах и отчёт клиенту, быстрее взять готовый сервис.

Какой способ проверки позиций в Google подходит под задачу
ЗадачаЧто взятьПочему
Разово посмотреть 5–10 запросовРучная проверка: окно инкогнито, город задан вручную, считать только органикуGoogle сам предупреждает, что ваша позиция зависит от истории поиска и местоположения
Тренд своего сайта, клики и показыSearch Console, отчёт «Эффективность» → «Результаты поиска», показатель «Средняя позиция»Данные самого Google, но средние за период и только по запросам, где сайт показывался
Регулярный мониторинг сотен запросов с отчётами, без кодаСервис съёма позиций: Топвизор, Arsenkin Tools, Пиксель Тулс, Серпхант, PR-CYИстория, графики и конкуренты готовы. Эти сервисы стоят в топ-10 Яндекса по запросу «проверка позиций google», их же называет ответ ИИ Google
Своя логика: CSV в своём конвейере, нестандартный город, сверка двух источниковСкрипт из этой статьиКод открыт, источник меняется флагом, история пишется в ваш файл

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

Скрипт, README и образец настроек лежат по ссылкам ниже, лицензия MIT. Источник можно заменить. У каждого есть своя функция (run_xmlriver, run_gsc, run_browser), а разбор результата и история общие.

Скачать архив: скрипт, README, образец настроек, пример запросов ZIP · 15 КБ · лицензия MIT Скачать google_positions.py Python · 27 КБ · лицензия MIT Скачать README.md Markdown · 12 КБ · описание параметров и настройки источников

Вопросы

Да, двумя способами. По своему сайту подойдёт Search Console API, который показывает среднюю позицию и только по запросам, где сайт уже был в выдаче. Для любого сайта подойдёт браузер, который пускает Google, например CloakBrowser, но только в небольшом объёме и с паузами между запросами.

Нет. Новых клиентов Google не подключает, для действующих доступ заканчивается 1 января 2027 года. Для поиска по сайтам до 50 доменов Google предлагает Vertex AI Search, а по полной веб-выдаче просит связаться с ним напрямую.

С начала 2025 года выдача Google требует JavaScript. Скрипт на requests получает страницу без результатов, а обычный автоматизированный Chromium получает капчу. Работают только браузеры с изменённым отпечатком, и даже им нужны паузы между запросами.

Для позиций в обычной выдаче Google — SERP-API, который снимает настоящую выдачу в заданном городе, или браузер с изменённым отпечатком в небольшом объёме. Vertex AI Search, который предлагает Google, ищет только по заданным доменам, до 50, и позиций в google.com не показывает. Для своего сайта бесплатно подходит Search Console API.

Откройте отчёт «Эффективность» → «Результаты поиска» и включите показатель «Средняя позиция». В таблице запросов появится средняя позиция за период: Google берёт самую высокую позицию сайта в каждом показе и усредняет её по всем показам. Позицию в конкретном городе на конкретную дату этот отчёт не показывает, для неё нужен снимок выдачи.