Локальный SERP-трекинг с геотаргетированными прокси

Узнайте, как точно отслеживать локальные позиции в поиске с помощью геотаргетированных резидентских прокси. Таргетинг на уровне города, параметры UULE, мониторинг локальной выдачи.

Локальный SERP-трекинг с геотаргетированными прокси

Почему локальная выдача отличается

Google выдаёт разные результаты поиска в зависимости от местоположения пользователя. Запрос «лучшая кофейня» возвращает совершенно разные результаты в Нью-Йорке, Лондоне и Токио. Эта локализация применяется не только к запросам о местных компаниях, но и ко многим коммерческим и информационным ключевым словам.

Для бизнесов, обслуживающих определённые географические рынки, отслеживание позиций на национальном уровне вводит в заблуждение. Сайт может занимать 1-е место в Чикаго, но 15-е в Хьюстоне по одному и тому же ключевому слову. Без локального SERP-трекинга вы принимаете SEO-решения на основе неполных данных.

Эта статья объясняет, как реализовать точный локальный SERP-трекинг с помощью геотаргетированных резидентских прокси. Общий обзор SERP-мониторинга читайте в нашем полном руководстве по парсингу SERP с прокси.

Как Google локализует результаты поиска

Google использует несколько сигналов для определения, какие локальные результаты показывать:

СигналКак работаетВлияние на результаты
Геолокация IPGoogle привязывает IP пользователя к географическому местоположениюОсновной фактор для локальной выдачи и органических результатов
GPS / местоположение устройстваМобильные устройства передают точные координатыОчень точные локальные результаты на мобильных
Местоположение аккаунта GoogleИстория местоположений от авторизованных пользователейПерсонализация результатов на основе прошлых локаций
Параметры поискаПараметры URL: gl (страна) и uule (точное местоположение)Переопределяют определение по IP
Языковые настройкиПараметр hl и заголовок Accept-LanguageВлияют на то, какие языковые версии отображаются

Локальная выдача (Local Pack)

Для запросов с локальным интентом Google показывает «локальную выдачу» — карту с тремя компаниями над органическими результатами. Эта выдача захватывает значительную долю кликов и полностью зависит от местоположения.

Вариативность органических результатов

Даже стандартные органические результаты смещаются в зависимости от местоположения. Google продвигает локально релевантный контент, корректирует позиции на основе регионального поведения и может показывать разные расширенные сниппеты в зависимости от города.

Почему геотаргетированные прокси необходимы

Чтобы увидеть результаты поиска, как они отображаются пользователям в конкретном городе, нужен IP-адрес из этого города. Здесь геотаргетированные резидентские прокси становятся незаменимыми.

  • Аутентичный сигнал местоположения: резидентский IP из Денвера сообщает Google, что пользователь действительно в Денвере
  • Точность локальной выдачи: правильный local pack можно увидеть только из правильного местоположения
  • Региональные различия контента: контент, ранжирующийся в одном регионе, может не ранжироваться в другом
  • Конкурентный анализ: видьте именно то, что видят ваши локальные конкуренты

Резидентские прокси ProxyHat поддерживают геотаргетинг на уровне города в 190+ локациях по всему миру.

Реализация локального SERP-трекинга

Вот полная реализация на Python для отслеживания позиций по нескольким городам:

import requests
from bs4 import BeautifulSoup
import json
import time
import random
from datetime import date
# ProxyHat proxy with geo-targeting
# Append city/country to your session for geo-targeted requests
# See docs.proxyhat.com for geo-targeting syntax
PROXY_BASE = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
LOCATIONS = [
    {"city": "New York", "gl": "us", "hl": "en", "uule": "w+CAIQICIITmV3IFlvcms"},
    {"city": "Los Angeles", "gl": "us", "hl": "en", "uule": "w+CAIQICILTG9zIEFuZ2VsZXM"},
    {"city": "Chicago", "gl": "us", "hl": "en", "uule": "w+CAIQICIHQ2hpY2Fnbw"},
    {"city": "London", "gl": "uk", "hl": "en", "uule": "w+CAIQICIGTG9uZG9u"},
    {"city": "Berlin", "gl": "de", "hl": "de", "uule": "w+CAIQICIGQmVybGlu"},
]
def track_local_ranking(keyword, domain, location):
    """Track keyword ranking from a specific location."""
    proxies = {"http": PROXY_BASE, "https": PROXY_BASE}
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
        "Accept-Language": f"{location['hl']};q=0.9,en;q=0.8",
    }
    params = {
        "q": keyword,
        "num": 20,
        "hl": location["hl"],
        "gl": location["gl"],
        "pws": 0,
    }
    # Add UULE parameter for precise city targeting
    if "uule" in location:
        params["uule"] = location["uule"]
    response = requests.get(
        "https://www.google.com/search",
        params=params,
        headers=headers,
        proxies=proxies,
        timeout=15,
    )
    response.raise_for_status()
    soup = BeautifulSoup(response.text, "html.parser")
    # Find organic position
    position = None
    for i, g in enumerate(soup.select("div#search .g"), 1):
        link = g.select_one("a")
        if link and domain in link.get("href", ""):
            position = i
            break
    # Check local pack presence
    in_local_pack = False
    local_pack = soup.select("div.VkpGBb")
    for item in local_pack:
        if domain in item.get_text().lower():
            in_local_pack = True
            break
    return {
        "keyword": keyword,
        "city": location["city"],
        "position": position,
        "in_local_pack": in_local_pack,
        "date": str(date.today()),
    }
# Track across all locations
keywords = ["best proxy service", "web scraping tools", "seo software"]
all_results = []
for kw in keywords:
    for loc in LOCATIONS:
        result = track_local_ranking(kw, "proxyhat.com", loc)
        all_results.append(result)
        city = result["city"]
        pos = result["position"] or "Not ranked"
        local = " (in local pack)" if result["in_local_pack"] else ""
        print(f"  {city}: #{pos}{local}")
        time.sleep(random.uniform(3, 6))
# Save results
with open(f"local_rankings_{date.today()}.json", "w") as f:
    json.dump(all_results, f, indent=2)

Параметр UULE

Параметр uule — наиболее точный способ указать местоположение в URL поиска Google. Он кодирует географическое местоположение, которое Google использует вместо геолокации по IP.

Как генерировать значения UULE

Значения UULE — это строки в кодировке Base64 определённого формата. Вот утилита для их генерации:

import base64
def generate_uule(location_name):
    """Generate a UULE parameter for Google geo-targeting."""
    # UULE format: w+CAIQICI{length_char}{base64_location}
    encoded = base64.b64encode(location_name.encode()).decode()
    # Length character mapping (A=1, B=2, ... Z=26, a=27, etc.)
    length = len(location_name)
    if length <= 26:
        length_char = chr(64 + length)  # A=1, B=2, ...
    else:
        length_char = chr(70 + length)  # Adjusted for longer names
    return f"w+CAIQICI{length_char}{encoded}"
# Examples
print(generate_uule("New York"))       # For New York City
print(generate_uule("Los Angeles"))    # For Los Angeles
print(generate_uule("London"))         # For London

Комбинирование UULE с геопрокси

Для максимальной точности используйте одновременно параметры UULE и геотаргетированные прокси из того же местоположения. UULE сообщает Google, откуда локализовать результаты, а IP прокси подтверждает географический сигнал.

Сценарии использования локального SERP-трекинга

Бизнесы с несколькими локациями

Франшизы, розничные сети и сервисные компании должны отслеживать позиции в каждом городе присутствия. Сеть пиццерий с 50 точками должна знать свои позиции на каждом рынке, а не только на национальном уровне.

Агентства локального SEO

SEO-агентства, управляющие клиентами в разных городах, должны точно отчитываться о локальных позициях. Показывать клиенту национальные позиции, когда он работает на локальном рынке, подрывает доверие.

Мониторинг конкурентов

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

Международное SEO

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

Реализация на Node.js

const axios = require('axios');
const cheerio = require('cheerio');
const { HttpsProxyAgent } = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://USERNAME:PASSWORD@gate.proxyhat.com:8080');
const LOCATIONS = [
  { city: 'New York', gl: 'us', hl: 'en', uule: 'w+CAIQICIITmV3IFlvcms' },
  { city: 'London', gl: 'uk', hl: 'en', uule: 'w+CAIQICIGTG9uZG9u' },
  { city: 'Berlin', gl: 'de', hl: 'de', uule: 'w+CAIQICIGQmVybGlu' },
];
async function trackLocal(keyword, domain, location) {
  const params = {
    q: keyword,
    num: 20,
    hl: location.hl,
    gl: location.gl,
    pws: 0,
  };
  if (location.uule) params.uule = location.uule;
  const { data } = await axios.get('https://www.google.com/search', {
    params,
    headers: {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
      'Accept-Language': `${location.hl};q=0.9,en;q=0.8`,
    },
    httpsAgent: agent,
    timeout: 15000,
  });
  const $ = cheerio.load(data);
  let position = null;
  $('div#search .g').each((i, el) => {
    const href = $(el).find('a').attr('href') || '';
    if (href.includes(domain) && !position) {
      position = i + 1;
    }
  });
  return { keyword, city: location.city, position };
}
// Track keyword across all locations
async function trackAcrossLocations(keyword, domain) {
  const results = [];
  for (const loc of LOCATIONS) {
    const result = await trackLocal(keyword, domain, loc);
    results.push(result);
    console.log(`${loc.city}: #${result.position || 'not found'}`);
    await new Promise(r => setTimeout(r, 3000 + Math.random() * 3000));
  }
  return results;
}
trackAcrossLocations('best residential proxies', 'proxyhat.com');

Лучшие практики локального SERP-трекинга

Выбор правильной гранулярности локации

  • Уровень страны: для широких международных кампаний. Используйте только параметр gl
  • Уровень города: для локальных бизнесов. Используйте gl и uule с прокси городского уровня
  • Уровень района: для гиперлокальных бизнесов (рестораны, магазины). Используйте точные координаты UULE

Отслеживайте мобильные и десктопные результаты отдельно

Локальные результаты существенно различаются между мобильными и десктопными устройствами. Мобильная выдача показывает более заметные локальные блоки и другие органические позиции.

Мониторьте Local Pack отдельно

Локальная выдача — это отдельный рейтинг от органических результатов. Отслеживайте, появляется ли ваш бизнес в локальном 3-паке для каждой локации независимо от органической позиции.

Планируйте проверки регулярно

Запускайте трекинг в одно и то же время каждый день. Результаты поиска колеблются в течение дня, и нерегулярное расписание вносит шум в данные. Утренний трекинг (6-8 утра в каждом целевом часовом поясе) обычно даёт наиболее стабильную базу.

Локальный SERP-трекинг без геотаргетированных прокси по определению неточен. Инвестируйте в резидентские прокси с таргетингом на уровне города, чтобы получать данные, отражающие то, что видят ваши реальные клиенты.

Подробнее о SERP-мониторинге через прокси читайте в наших статьях о лучших прокси для веб-скрапинга и о том, как парсить без блокировок. Настройку геотаргетинга смотрите в документации ProxyHat.

Готовы начать?

Доступ к более чем 50 млн резидентных IP в 148+ странах с AI-фильтрацией.

Смотреть ценыРезидентные прокси
← Вернуться в Блог