NeoWatcher — сервис отслеживания изменений на сайтах

Постоянный клиент, которому сделали несколько сайтов попросил найти сервис для уведомлений о изменениях на сайтах. Провели сравнение и пришли к выводу, что существующие решения либо слишком громоздкие, либо недостаточно гибкие для нашей задачи....
Время чтения: 15 минут

Отправим материал вам на почту

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

Основные недостатки:

1. Проверяют все страницы (нужно исключить страницы фильтрации, на одном из сайтов их около 100 000)
2. Проверяют всю страницу (нужно только заданный блок, например простое изменение названия меню «Контакты» на «О компании» затронуло все страницы, что сбивает с толку).

Составили список требований к ПО:
1. Отсылка отчетов на почту (установка периодичности)
2. Просмотр отчетов через веб интерфейс (или прога под винду)
3. Автоматическое построение списка страниц сайта
4. Возможность фильтрации, какие страницы проверять, а какие — нет
5. Разделение страниц по группам
6. Возможность указать какой блок в какой группе страниц проверять (на главной — проверять все, на внутренних только контент (без меню))
7. Желательно русский интерфейс

Решили сделать свой веб сервис. Сделали. Ниже о принципе работы и краткий обзор функционала.

Принцип работы

На пальцах все просто: качаем страницу первый раз, сохраняем, качаем второй раз, сверяем. Нет изменений — хорошо, есть изменения — сообщаем о них. Казалось бы cron + wget + diff и все готово. Но на практике вылазит много нюансов.

Сканирование сайта и сохранение страниц

Список страниц сайта

Сканирование сайта и сохранение страниц

Сервисов, которые умеют дифать одну указанную страницу — пруд пруди. Для начала нужно сделать, чтоб NeoWathcher самостоятельно искал страницы сайта чтоб знать, что же сравнивать. Алгоритм такой: закачиваем первую страницу, сохраняем ее, ищем ссылки на другие внутренние страницы, добавляем эти страницы в очередь, если таких еще нет. Берем следующую страницу из очереди. Тут начинаются первые проблемы, ведь достаточно много сайтов используют фасетную навигацию (фильтры), например http://biopromin.info/index.php?gc.fk_id_country=2&type=static&child=certificate&count=10. Один этот факт дает нам сотни тысяч отдельных url на одном сайте. Логический выход — разделяем страницы на 2 группы: Сканировать, Игнорировать. Критерий отправки страницы в группу — попадание ее url под регулярное выражение. Регулярные выражения для страниц Сканировать и Игнорировать добавляет пользователь, или техподдержка для каждого сайта отдельно. Таким образом после сканирования у нас остается вменяемое количество страниц, изменения на которых действительно нужно отслеживать. При этом страницы не нужно добавлять вручную. Добавление новых страниц на сайте (если их нужно сканировать) повлечет автоматическое добавление их в систему мониторинга при следующем обходе. Также можно добавлять произвольные группы страниц. Зачем — ниже. Может быть такое, что на сайте есть страницы без ссылок на них? Конечно может! Сделаем еще одну группу для страниц, которые можно добавить вручную.

Сравнение разных версий страниц

Изменение, html

Изменения html

 

Изменение, текст

Изменения текста

При втором обходе сайта мы уже можем сравнить то, что было с тем, что есть. И тут нас поджидает засада. Сравнивая одну страницу — все просто, либо изменилась, либо нет. А если у нас сотни страниц и изменился пункт меню, телефон в подвале, или картинка капчи в форме регистрации? Решение и тут простое — сравниваем только те элементы DOM, которые действительно нужно сравнивать. Так, как разные страницы могут иметь разные шаблоны — предусмотрено разбиение страниц на группы, о котором написано выше и свои фильтры для каждой группы. Например на главной нужно отслеживать весь контент, в блоге только список постов и текст каждого поста, включая title, description, keywords, H1, H2. Включать или исключать часть страницы можно также при помощи регулярных выражений. Такое решение позволяет игнорировать незначительные элементы страниц, изменение которых — норма (часы, капча…) а также реагировать один раз на повторяющиеся изменения (меню, другие общие элементы).

Ссылки рабочие, индексируемые и всякие

Почти на каждом сайте есть множество ссылок как внешних так и внутренних. Не всегда сервер дает ответ 200. Иногда 301, чаще 404, да много разных их бывает. Если ответ на внутреннюю ссылку 301, то скорее всего страницу, на которую идет редирект нужно тоже проиндексировать. А также сообщаем, что на сайте есть перенаправления:

Перенаправления

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

Ссылки в отдельной группе

Аналогично анализируем и внешние ссылки, но для них вытаскиваем только код ответа.
Иногда SEO шники просят закрыть все внешние ссылки тегами rel=»nofollow» и , сразу же вырос инструмент, который позволяет найти закрытые и незакрытые ссылки.

Экспорт

Сканирования и ревизии

Для удобства пользователя делаем список сканирований сайта:

сканирование сайта

А при обнаружении изменений, список изменённых страниц и кратко об изменениях.

Краткое описание об изменениях

Этот же список высылаем на почту в составе отчета, расписание которого можно настроить.

Рассылка

Скриншоты сайта

При изменении не только текста сайтов, но и картинок, или CSS может изменятся внешний вид. Для этого есть возможность создавать и хранить скриншот каждой измененной страницы. По умолчанию эта функция отключена, так как поисковики расценивают визиты скриншотера, как пользователя, который пришел и сразу убежал. Не всем такое нужно, хотя функция интересна.

Описание основного функционала закончили, но стоит упомянуть о сервисном, который тоже полезен.
Самые важные таблицы можно экспортировать для последующей обработки в привычных инструментах или пересылке тем же SEOшникам.

Есть биллинг, возможность редактировать тарифы, подключены платежные системы paypal и liqpay.

Тарифы

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

Поделиться:

У вас есть задача для нас?
Пришлите заявку, обсудим и решим!