Парсинг robots.txt файлов на php

robots.txt  файл с инструкциями для поисковых машин. Обычно в нём указывают список url, которые нужно запретить к индексации (директива Disallow). Но, это далеко не все возможности robots.txt. В robots.txt можно:

  1. задать главное зеркало сайта с помощью директивы Host
  2. указать ссылки на файлы sitemap с помощью директивы Sitemap
  3. указать минимальный интервал в секундах с помощью директивы Crawl-delay, не ранее чем через который робот сделает запрос к следующей странице сайта. Обычно используют, если сайт не справляется с нагрузкой
  4. указать get-параметры, которые не стоит учитывать при индексации страниц с помощью директивы Clean-param
  5. задать urls, которые разрешены к индексации с помощью директивы Allow (протиповоложенность директиве Disallow)

Итак, задача:

Нужно парсить содержимое всех директив robots.txt на php 

Актуальную версию парсера robots.txt вы всегда можете скачать с моего репозитория на github. Я сделал online версию для проверки парсера, чтобы можно было его "пощупать". Получить все правила robots.txt файла с помощью этой библиотеки можно так:

$robotsTxtContent = file_get_contents('http://example.com/robots.txt');
$parser = new RobotsTxtParser($robotsTxtContent);
print_r($parser->getRules());

Моя версия парсера имеет следующие преимущества перед аналогичными решениями, которые я находил в Интернет:

  1. обрезаются комментарии (всё, что следует после символа "#" и до символа перевода строки)
  2. парс значения директивы Clean-param, учитывая синтаксис директивы с указанием path
  3. правильный парс директивы Host. Дело в том, что Host — межсекционная директива. Во-первых, при наличии двух директив Host поисковые боты учитывают только первую найденную по-порядку. Во-вторых, т.к. директива межсекционная, то, даже если она принадлежит секции User-agent: YandexBot, то все равно будет учитываться всеми ботами.
  4. покрытость unit-тестами с множеством кейсов

Если вы придумали кейс, который библиотека не покрывает, или нашли такой сайт, то вы можете написать об этом здесь.

Fork me on GitHub

 
 
 
 

icon Комментарии 0

Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться
НОВЫЕ ПОЛЬЗОВАТЕЛИ