Перевод статьи от Кевина Ричарда
Если использовать параметр “uule” в котором закодирована при помощи base64 геолокация, можно смотреть локальную поисковую выдачу. Для начала давайте узнаем, как Google формирует эти префиксы, а потом разберемся с кодированием.
С тех пор, как апдейт Google Venice вначале появился в США, а потом во Франции и других странах, поисковая выдача заметно изменилась. Для большинства запросов, даже для базовых ключевых слов, Гугл стал показывать локальную выдачу.
Сейчас местоположение учитывается на основе ip адреса. Для отображения локальной выдачи Гугл советует использовать запросы с ключом топонимом.
Обычно данные локальной выдачи необходимы для сбора информации, сравнения и проверки позиций на основе географического местоположения или если нужно отправить клиенту прямую ссылку на различные версии поисковой выдачи в зависимости от города.
Google подсказки тоже показываются в зависимости от установленного местоположения и это еще одна причина, почему мы должны уметь самостоятельно задавать геолокацию для наших запросов.
Adwords — первая подсказка
Если “hl” (язык) или “gl” (геолокация для страны) обычные параметры, насколько я знаю, не было никаких других способов, чтобы установить локальные параметры поиска для конкретного города или региона через строку поиска. Проблема с установкой геолокации была до тех пор, пока я не сделал открытие. Как и во многих других случаях, чтобы узнать что-то новое про Google, нужно покопаться в Adwords. Рекламодатели любят смотреть, как их объявления отображаются в локальной выдаче. Для реализации этих потребностей, Гугл предоставила инструмент для предварительного просмотра поисковой выдачи для конкретного места.
C помощью инструмента AD Preview, Google позволяет задавать параметры для запроса, подробно указав тип устройства (Настольный или портативный компьютер, мобильное устройство, планшет), язык, домен и настройки местоположения (название места или координаты).
После того как задана поисковая фраза и указаны нужные параметры, вы можете увидеть предварительные результаты выдачи.
Результат отображается в iframe. Из этих результатов можно выжать следующее:
- либо изучить DOM (Document Object Model) и извлечь ссылку из iframe;
- либо попытаться извлечь первичные GET данные после команды POST.
Для примера, тестировалось ключевое слово “ресторан” для различных городов, были получены следующие ссылки:
Хорошо, но что это за параметры?
Как мы видим, есть два параметра, которые изменяются: tci и uule. Если предположить логически,
- “tci” должен содержать данные геолокации, в данном случае числовое значение “g”. (tci=g:) такое же, как в списке географических кодов,
- и параметр “uule” цель которого нам еще предстоит понять.
Я провел разные тесты, удалял различные параметры из ссылки и обратил внимание, что Google использует этот параметр только для географического таргетинга.
После некоторых исследований, я наткнулся на статью одного из коллег по SEO, который писал, что нашел этот параметр в объявлениях для android устройств и что это результат AES (Advanced Encryption Standard) шифрования.
Это заставило меня задуматься, зависит ли это от авторизации пользователя и может быть эти параметры связаны с конкретным человеком. Я опасался, что эти данные могут зависеть от географических данных + пользовательских сессий. Если это так, это могло разрушить все надежды найти один универсальный параметр и GET запрос для геолокации нужного города.
Я связался с коллегой во Франции, чтобы проверить эту теорию и попытаться найти значение параметра “uule”. Оказалось, его параметр “uule” и мой - совпадают. Значит он показывает геолокационные запросы для одного места.
Тогда возникает вопрос, как можно узнать все возможные значения для “uule”?
Продолжим “копать” их или попытаемся понять, как это работает, чтобы мы могли сами создавать “uule”? Так и поступим.
Стоит ли оно того? Давайте копать!
Так как у нас уже есть файл со всеми местами, что мы искали, нам нужно было только “вырыть” источник из сгенерированного фрейма с помощью casperjs или imacros.
В результате был получен длинный список ссылок с географическим таргетингом:
Рестораны расположенные в Хьюстоне
Юридические услуги в Солт-Лейк-Сити
и т.д.
Base64 — ключ к разгадке
После обсуждения с несколькими друзьями и выхода этой статьи (на французском языке), мы пришли к выводу, что в “uule” закодировано через base64 кодировку “каноническое имя” конкретного места. Возьмем к примеру французские города:
- Lezigne,Pays de la Loire,France gives w+CAIQICIfTGV6aWduZSxQYXlzIGRlIGxhIExvaXJlLEZyYW5jZQ
- Louverne,Pays de la Loire,France gives w+CAIQICIgTG91dmVybmUsUGF5cyBkZSBsYSBMb2lyZSxGcmFuY2U
- Mazeuil,Poitou-Charentes,France gives w+CAIQICIfTWF6ZXVpbCxQb2l0b3UtQ2hhcmVudGVzLEZyYW5jZQ
- Montsurs,Pays de la Loire,France gives w+CAIQICIgTW9udHN1cnMsUGF5cyBkZSBsYSBMb2lyZSxGcmFuY2U
- Nantes,Pays de la Loire,France gives w+CAIQICIeTmFudGVzLFBheXMgZGUgbGEgTG9pcmUsRnJhbmNl
- Orvault,Pays de la Loire,France gives w+CAIQICIfT3J2YXVsdCxQYXlzIGRlIGxhIExvaXJlLEZyYW5jZQ
- Reaumur,Pays de la Loire,France gives w+CAIQICIfUmVhdW11cixQYXlzIGRlIGxhIExvaXJlLEZyYW5jZQ
- Reze,Pays de la Loire,France gives w+CAIQICIcUmV6ZSxQYXlzIGRlIGxhIExvaXJlLEZyYW5jZQ
Я заметил, что начало строки всегда одинаково: w+CAIQICI. Затем мой друг попытался удалить следующую букву (“f” - в первом примере) и остальная часть строки отлично расшифровывается с base64. Из TGV6aWduZSxQYXlzIGRlIGxhIExvaXJlLEZyYW5jZQ мы получаем Lezigne,Pays de la Loire,France.
Теперь осталось понять, что же за буква находится между w+CAIQICI и остальной частью строки? Оказалось все просто:
- w+CAIQICI = убираем, чтобы получить место (основанное на каноническом имени) из “uule”
- f = это своеобразный секретный ключ, который основан на длине не закодированного “канонического имени”
- TGV6aWduZSxQYXlzIGRlIGxhIExvaXJlLEZyYW5jZQ - закодированное с помощью base64 “каноническое имя”
Ниже вы видите все ключи и длины, которые нам удалось получить:
Как это использовать?
- Узнайте “каноничное имя” для места в Google Adwords Geotareting Tool. (пример: Ruti, Switzerland)
- Получите данные о длине строки, например здесь. (пример: 16)
- Используйте длину, чтобы найти специальный ключ в таблице. (пример: Q)
- Закодируйте используя Base64 ваше “каноничное имя”, например здесь. (пример: UnV0aSxTd2l0emVybGFuZA)
- Объединяем все вместе: w+CAIQICI и секретный ключ и закодированная в base64 строка (пример: w+CAIQICIQUnV0aSxTd2l0emVybGFuZA)
Вуаля, вы получили ваш “uule”.
Если “канонического имени” нет в официальном списке Google, вы можете создать его, используя Google Maps API (во Франции синтаксис: Город, регион, страна). А если получившееся “каноническое имя” слишком длинное, не переживайте, попробуйте подобрать ключ простым перебором (используйте все символы, пока один не сработает).
Если вам интересен скрипт, который я использовал для casperjs, вы можете найти его по ссылке.