Статью подготовил Юрий Никулин, эксперт в продуктовом SEO. Юрий — преподаватель в it-школах «Нетология» и «CyberMarketing», победитель Сколково в номинации «Лучший стартрап в сфере IT технологий» в 2023 году и модератор на конференции «Optimization».
Что такое cURL
cURL (Client URL) — это обычная программа встроенной командной строки в Windows или в MAC. Она позволяет взаимодействовать с сервером по разным протоколам, используя URL в запросе.
Протоколов достаточно много, но для SEO специалистов в 99% случаев, нужны только HTTP и HTTPS:
HTTP это устаревший незащищенный протокол передачи данных между двумя серверами, например между вашим компьютером (браузером) и сервером любого сайта. Пример: http://www.site.com
HTTPS это расширение к протоколу HTTP, только данные передаются в зашифрованном виде. Пример: https://www.site.com
Так выглядит простейшая схему работы протокола HTTP/HTTPS:
Работа с cURL
Рассмотрим, как работать с cURL на разных операционных системах.
Windows
Для Windows 10 и новее cURL установлен по умолчанию. Если у вас более старая система, скачайте cURL с официального сайта.
Нажмите «Пуск» и введите поиске фразу «Windows terminal». Далее начинайте вводить запросы cURL. Самый распространенный по типу “Hello World” — curl --version, он позволяет проверить версию.
MacOS
Откройте “Launcher” и через поиск выберите там “Terminal”. Введите аналогичный запрос curl --version, после этого должна появиться версия curl, например, вот так:
Linux
На Linux cURL тоже установлен по умолчанию. Для проверки версии cURL на Linux введите в терминале curl --version.
Главная особенность cURL для SEO и на что он способен
cURL позволяет узнать, как поисковые боты индексируют и видят страницу. Если хотите понять, какой текст HTML скрыт от глаз поисковиков или какие HTTP-заголовки ответа сервера получают боты, cURL поможет.
На что он способен:
Заменять user-agent;
Проходить базовую аутентификацию;
Получать HTTP-заголовки и отслеживать цепочки редиректов;
Получать HTML страницы.
Три причины, почему это лучше, чем браузер и его расширения:
Чтобы контролировать процесс самому, в cURL баги не допустимы;
Чтобы притвориться поисковиком, такое может браузер и некоторые расширения;
Расширения в Google Chrome не могут менять user-agent. Только те, которые строятся на платформенных решениях и выносятся на отдельный сервер.
Пройдемся по каждой из особенностей, опишем возможные задачи и их решения.
Замена user-agent
Задача
Вы хотите посмотреть страницу глазами Яндекса или Google и увидеть какой контент им недоступен. У них, конечно, есть свои инструменты, но Яндекс ограничивает отдачу HTML через инструмент «Проверка ответа сервера» в 50 000 строк, а «Google mobile-friendly test» вовсе перестал работать, так что посмотреть сторонние сайты не получится.
Решение
Шаг 1: вводим команду
Откройте терминал и введите следующую команду: curl -A "user-agent" URL. Из чего состоит команда:
- -A — эта опция используется для установки user-agent в HTTP запросе к серверу сайта. К примеру мы хотим притвориться Google. По другому, мы говорим: “Эй, сервер, мы поисковый бот Google! Дай нам тот контент, который ты хочешь показывать этому поисковику”;
- “user -agent” — вставляем от поискового бота, в нашем случае от Google:
curl -A "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://pr-cy.ru
Список user-agent Google можно посмотреть в официальной документации. От Яндекса документация представлена в таблице в разделе «Основные поисковые роботы».
В итоге cURL возвращает следующий ответ:
Шаг 2: ищем невидимый для Google контент
Есть четыре пути определения контента, который не видит поисковый бот:
1. Очистите текст, который вам выдал cURL, от HTML-тегов, либо найдите любой онлайн-сервис по запросу «Очистить текст от HTML тегов», либо в DevTools в разделе Console введите javascript код console.log(document.body.textContent); и скопируйте полученный текст в какой-нибудь редактор.
Сравните тексты, полученные из cURL под user-agent Google, и текст из вашего браузера со стандартным user-agent.
Сравниваем два HTML кода в любом онлайн-сервисе. Только будьте аккуратны, они сравнивают построчно. Любое изменение, даже точку, будут считать как добавленный/удаленный контент;
Используйте встроенную библиотеку python BeautifulSoup. Не будем вдаваться в подробности, так как эта тема отдельной статьи;
Различные расширения для браузеров, например SEO ALL STARS для Google Chrome. Единственный минус — многие расширения не умеют видеть текст под iframe. В любом случае, поэкспериментируйте.
Важное замечание: если на сайте стоит анти-бот система типа Cloudflare, то cURL такую защиту обойти никак не сможет.
Прохождение базовой аутентификации
Задача
Вы создали новый сайт или новую страницу, но она не доступна для пользователей и закрыта от посещений. Как протестировать такую страницу глазами Яндекса или Google?
Решение
cURL позволяет проходить базовую авторизацию на странице и получать любые данные, которые отдает сервер сайта.
Откройте терминал и введите туда curl -u "username:password" URL, и задайте user-agent ботов из инструкции выше: добавьте дополнительно -A "user-agent".
Что вводить:
Вместо username:password пропишите логин и пароль;
Вместо user-agent введите нужного поискового бота, например от Google:
Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Параметр -u используется для указания учетных данных и говорит cURL, что страница с авторизацией.
Как это выглядит в терминале:
После того, как вы прошли базовую авторизацию и посмотрели страницу глазами Google, останется только сравнить полученный HTML от Google и в браузере и найти тот текст, который поисковик не видит. Для этого используйте инструкцию выше.
Получение HTTP-заголовков и отслеживание цепочки редиректов
Задача
Вы заходите на сайт и видите страницу с ответом сервера 200 OK. Пользователи жалуются, что по этой же странице у них открывается совсем другой контент или их перенаправляют в другое место. Вы хотите подтвердить жалобы пользователей и параллельно проверить ответы сервера и цепочки редиректов.
Решение
Шаг 1: проверяем, что видит Google
Такая ситуация может возникнуть, когда продакт-менеджер проводил сплит-тест и нечаянно добавил в него поисковых ботов или нецелевую аудиторию. Возможен вариант, когда сплит-тест отключили, а разработчики неверно поправили техническую часть. Из-за этого контент, ответы сервера и HTTP-заголовки могут выдаваться разные.
Вначале проверяем, нет ли лишних редиректов для бота Google и какие HTTP-заголовки ему возвращаются:
curl -sSL -D - -A "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" http://pr-cy.ru
Немного позже расшифруем все параметры в этом запросе.
Получаем следующий ответ, где видим HTTP-заголовки и цепочки редиректов:
Видим, что для бота срабатывает один 301 редирект. Но это не из-за проблемы с сервером, а грамотно настроенные редиректы с HTTP на HTTPS. Запоминаем результат.
Шаг 2: проверяем, нет ли редиректов у пользователей, которые столкнулись с проблемами
Для этого нужно знать user-agent, accept и accept-language пользователя, у которого имеется проблема. Про accept и accept-language подробнее можно почитать в документации Mozilla.
Данные об accept-ах и user-agent узнаем через онлайн-сервис webtools или через браузер пользователя: DevTools -> Network -> Headers -> Request Headers.
После того как узнали эти данные, вводим в консоль следующий запрос:
curl -sSL -D - -H "User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/105.0" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" -H "Accept-Language: en-US,en;q=0.5" http://pr-cy.ru
Получаем ответ, где видим HTTP-заголовки и цепочки редиректов, только уже для пользователя с проблемой. Теперь нужно сравнить ответы сервера для пользователей и ответы сервера для Google.
На скрине мы видим, что c HTTP-заголовками все в порядке и цепочки редиректов для пользователей и ботов одинаковые.
Рекомендация: на всякий случай проверьте тоже самое, только со своим user-agent. И сравните, что видят пользователи, что Google, а что вы.
Параметры в запросе:
-s — этот флаг означает “тихий” режим и не выводит информацию в терминал о ходе процесса;
-S — этот флаг не выводит ошибки возникающие в процессе запроса, чтобы не засорять терминал;
-L — этот флаг позволяет cURL следовать редиректам в запросе и показывать всю цепочку;
-D - — этот флаг выводим заголовки HTTP headers в ответ терминала, и не записывает в файл;
-H - — этот флаг указывает на добавление заголовка к HTTP-запросу. Он позволяет уникализировать запрос и притвориться любым пользователем.
Резюмируем
cURL — простая программа, которая имеется по умолчанию практически на всех компьютерах Windows и MAC. Она позволяет делать HTTP-запросы к любому сайту и получить HTTP-заголовки и тело страницы.
Мы разобрали три основных ситуации, в которых SEO-специалист может использовать cURL:
Просмотреть страницы глазами поисковика независимо от того, работают ли официальные сервисы от Яндекса и Google;
Получить тело страницы, когда она находится под авторизацией и поисковые боты не могут на нее попасть;
Отследить, действительно ли вам, вашим пользователям и поисковым ботам отдаются одинаковые редиректы и HTTP-заголовки.