Все посты
5627 1 Знания

Что такое cURL и как он поможет вам выйти на 99 LVL в SEO

Рассказываем, как пользоваться cURL и какие задачи с его помощью можно решить.

Статью подготовил Юрий Никулин, эксперт в продуктовом 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:

Схематичное изображение работы протокола HTTP/HTTPS
Схема работы протокола HTTP/HTTPS

Работа с cURL 

Рассмотрим, как работать с cURL на разных операционных системах.

Windows

Для Windows 10 и новее cURL установлен по умолчанию. Если у вас более старая система, скачайте cURL с официального сайта.

Нажмите «Пуск» и введите поиске фразу «Windows terminal». Далее начинайте вводить запросы cURL. Самый распространенный по типу “Hello World” — curl --version, он позволяет проверить версию.

MacOS

Откройте “Launcher” и через поиск выберите там “Terminal”. Введите аналогичный запрос curl --version, после этого должна появиться версия curl, например, вот так:

Проверка версии cURL на MacOS
Проверка версии cURL на MacOS

Linux

На Linux cURL тоже установлен по умолчанию. Для проверки версии cURL на Linux введите в терминале curl --version.

Главная особенность cURL для SEO и на что он способен

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

На что он способен:

  • Заменять user-agent;

  • Проходить базовую аутентификацию;

  • Получать HTTP-заголовки и отслеживать цепочки редиректов;

  • Получать HTML страницы.

Три причины, почему это лучше, чем браузер и его расширения:

  1. Чтобы контролировать процесс самому, в cURL баги не допустимы;

  2. Чтобы притвориться поисковиком, такое может браузер и некоторые расширения;

  3. Расширения в 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 возвращает следующий ответ:

Ответ в виде HTML-кода

Шаг 2: ищем невидимый для Google контент

Есть четыре пути определения контента, который не видит поисковый бот:

1. Очистите текст, который вам выдал cURL, от HTML-тегов, либо найдите любой онлайн-сервис по запросу «Очистить текст от HTML тегов», либо в DevTools в разделе Console введите javascript код console.log(document.body.textContent); и скопируйте полученный текст в какой-нибудь редактор.

Ввод JavaScript-кода
Очистка текста от HTML-тегов

    Сравните тексты, полученные из cURL под user-agent Google, и текст из вашего браузера со стандартным user-agent.

    1. Сравниваем два HTML кода в любом онлайн-сервисе. Только будьте аккуратны, они сравнивают построчно. Любое изменение, даже точку, будут считать как добавленный/удаленный контент;

    2. Используйте встроенную библиотеку python BeautifulSoup. Не будем вдаваться в подробности, так как эта тема отдельной статьи;

    3. Различные расширения для браузеров, например SEO ALL STARS для Google Chrome. Единственный минус — многие расширения не умеют видеть текст под iframe. В любом случае, поэкспериментируйте.

    Сравнение видимого и невидимого для Google текста

    Важное замечание: если на сайте стоит анти-бот система типа 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-заголовки и цепочки редиректов:

    Вовращаемые 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-заголовки.

    Возьмите под контроль продвижение своего сайта
    Исправьте ошибки, которые мешают сайту выйти в топ, и вы увидите рост трафика и дохода.
    🔍 Подпишись на @prcynews в телеграм — оставайся в курсе последних SEO новостей и свежих материалов.

    Теги поста или какие разделы почитать еще:

    Комментарии (1)
    ist-svet   05.03.2024 16:25
    Любопытно
    🔥 Внутренняя оптимизация сайта — большой гайд по самостоятельной проверке
    Фильтры, санкции и алгоритмы Google
    Внешние ссылки — что это и для чего нужны