31 августа 2018 Яндекс официально отказался от традиционного тИЦ из-за его морального устаревания. При этом, пользователи были успокоены: на замену «плохому» показателю пришёл «хороший» — ИКС (индекс качества сайта).
Оставим в стороне моральную и этическую сторону вопроса замена одной пузомерки другой. Не будем рассуждать и строить теории относительно формулы расчёта — благо, это делают СЕО-гуру, до которых мне расти и расти. Мы остановимся на более приземлённом, а именно: получении значения параметра ИКС.
Если хотите просто получить скрипт — перейти к ссылке на скачивание.
Мне знакомы два способа получения параметра: через панель Яндекс.Вебмастер и через изображение. В последнем случае Яндекс поступил весьма продумано: код, показывающий ранее «денежку тИЦ», теперь показывает параметр ИКС. Пользователям на своих сайтах ничего менять не нужно.
Теперь представим, что Вы захотели проверить ИКС группы сайтов. Причём, не только своих (для этого достаточно добавить сайты в панель Webmaster), но и конкурентов. Можно воспользоваться одним из сервисом массовой проверки, но они (насколько мне известно) имеют некоторые ограничения на число одновременно проверяемых сайтов. Для решения данной проблемы я сделал небольшой скрипт. Его можно залить на свой хостинг и самостоятельно устраивать массовые проверки. Либо сделать ещё один сервис «массовой проверки ИКС», бесплатно и без регистрации.
Как это работает
Как я уже говорил, мне известны 2 способа: через запрос к панели Вебмастера и посредством получения картинки. В скрипте реализован второй вариант. Конечно, «в лоб» и через ЯВ-панель проще получить параметр, но там, если не ошибаюсь, может вылазить капча. Значит, нужно будет заставлять пользователей или расшифровывать эти самые капчи, или ожидать ответа, пока скрипт не обратится к одному из сервису-разгадывателю (порядка 15 секунд). Если запросов будет слишком много, Яндекс может просто заблокировать IP (да, это сервер, на котором расположен Ваш сайт).
Друзья, это моё предположение. Если Яндекс на самом деле не банит адреса при тысячах запросов, сообщите пожалуйста в комментариях. Реализация этого метода будет проще и поможет снизить нагрузку на хостинг при проверке.
Вариант с изображением картинок лишён данного недостатка. Пару лет назад у меня приводилось немного аналитики по тИЦу для русских доменов. Для написания статьи на сервера Яндекс было отправлено более 6 миллионов (!) запросов, при этом ни разу не получил бан по IP.
Итак, с скрипту. Он совершает запрос на получение «экс-денежки» и переводит графическое представление ИКС в текстовое. Эдакий FineReader в миниатюре. Ну да, всего-то.
Немного о реализации
Ранее я делал рабочий скрипт «расшифровки» тИЦ с картинки-денежки. Там использовался не очень хороший метод, который подразумевал предварительное «обучение» этого скрипта.
Сначала нужно было получить изображение, вырезать из него кусок, который может содержать значение. После этого к картинке применялось несколько фильтров, а затем пиксели переводились в такой вид:
Далее, для каждого знака в расчёт брались только «важные пиксели» (составляющие символ), на основании чего формировались маски. Для указанного примера была такая штука:
'7,12,15,3,3,7,9' => 'C',
'1,2,5,8,11,10,7,4,1' => 'Y',
Т. е. в первом ряду буквы C было 7 важных пикселей (единицы), во втором — 12, потом 15, 3 и т. д.
Главный недостаток этого подхода — при разных значениях тИЦ какие-то пиксели могли выпадать или появляться (классическое сглаживание + перевод картинки в формат .gif). Поэтому в процессе обучения для цифры 0 (ноль) появилось три маски:
'7,13,5,2,15,11' => '0',
'7,13,6,2,15,11' => '0',
'8,13,6,3,15,11' => '0',
Самой сложной оказалась цифра 8, она со временем разрослась до 8 масок.
Подход, который использую сейчас, более продвинутый. Сначала так же нужно получить картинку с параметром и вырезать оттуда определённую область. После чего изображение переводится в текст: фон помечается точкой, пиксели другого цвета — буквой x.
В данной версии скрипта цвет фона жёстко завязан на текущий — 0x878787. В дальнейшем, если Яндекс решит-таки его менять, можно будет добавить первичный проход по изображению с целью получить главенствующий цвет, который и является фоном.
После следует выбрасывание пустых (не значимых) рядов, состоящих целиком из фона. А далее формируется «вытянутая» последовательность для очередного символа. Каждый символ имеет размер 8×11, кроме цифры 1 — у неё 5×11.
Осталось довольно простое действо: «набираем» очередной символ и сравниваем его с эталонными — YandexIks::$reference. Для сравнения используется встроенная в PHP функция similar_text(). Функция возвращает количество совпадающих символов. В качестве граничного значения принимаю отклонение в 9%, что составляет 81+ для всех символов, кроме единицы — для её «узнавания» нужно 51 или больше. Если мои разъяснения не понятны, читайте подробности по ссылке выше или смотрите код.
Скачать PHP скрипт для массовой проверки ИКС
Отказ от ответственности
Скачивая данный скрипт Вы соглашаетесь, что все возможные последствия от его использования берёте на себя. Скрипт поставляется «как есть», без каких-либо гарантий. Автор ни в коей мере не несёт ответственности за любой возможный ущерб — как прямой, так и косвенный. Если Вы с этим не согласны, не скачивайте файлы и не устанавливайте их на свои сервера.
Скрипт тестировался в PHP версий 5.4+ и 7.0+
Для скачивания нажмите кнопку ниже:
Скачать скрипт массовой проверки ИКС
Актуальная версия — 1.1
После этого распакуйте архив и залейте его на свой хостинг. Содержание архива:
- YandexIks.php — главный класс, с помощью которого можно получать значения параметра ИКС.
- example.php — пример работы со скриптом.
- readme.txt — отказ от ответственности.
Пример использования
Для получения значения ИКС нужно скопировать YandexIks.php на свой хостинг, после чего подключить его. Для работы следует использовать метод getValueFromImage(), а в качестве параметра передать домен.
Если класс расположен в директории с рабочим скриптом, для вывода значения параметра ИКС код будет такой:
include_once 'YandexIks.php';
echo YandexIks::getValueFromImage('google.ru');
Либо распакуйте скачанный архив и залейте его на сервер. После чего скрипт вызывается через адресную строку браузера:
vash.site/put/do/skripta/example.php
Пример работы со скриптом:
По сути, всё просто до безобразия: в текстовое поле вводится группа доменов, нажимается кнопка ok и… всё, ожидается результат.
Подумал тут, что не очень хорошо презентовать скрипт без примера работы. Что же, сделано!
Представленная ниже форма имеет ограничения на проверку: до 3-ёх доменов.
Об ошибках и пожеланиях можете писать в комментариях. Как первое, так и второе, не факт что окажется реализованным, но 100% будет прочитано.
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц
Хороший скрипт. Параметр ИКС совсем новый и ещё не все сервисы реализовали проверку данного значения. Но думаю, что в будущем на сервисах можно будет проверять ИКС без каких либо ограничений по количеству.
Александр, спасибо на добром слове
Честно говоря, мне не очень понятно, для чего люди пользуются какими-то сервисами для определения такого рода параметров. Ладно PR от Гугл, там, если не ошибаюсь, подобного не было. Но что ТИЦ раньше, что ИКС сейчас, можно получить с помощью сервисов Яндекса. Если требуется массовая проверка… а зачем? Свои сайты почти наверняка в панели Вебмастера есть, а чекать сотни/тысячи конкурентов в сервисах — долго, вряд ли кто согласится бесплатно предоставить неограниченную проверку доменов.
В любом случае, со скриптом появилось чуть больше выбора. Хочешь — пользуешься панелью Вебмастера. Хочешь — заливаешь скрипт себе на хостинг и проверяешь домены в количествах, которое позволит система.
Вы меня заинтересовали , нужно будет установить скрипт на сайт!
Анди, а в сайтбаре можно данный скрипт подключить?
Андрей,
доброго дня.
Самый простой способ — через айфрейм. Залить скрипт на хостинг, после чего подключить (совсем как ролики с ютуба):
Тогда будет даже без перезагрузки страницы работать. Собственно, в этой статье так и сделано)
Если хотите полноценно интегрировать, то понадобится чутка поколдовать, что можно сделать с помощью одного из плагинов, позволяющих выполнять PHP-код, либо править файл темы и интегрировать туда.
Но я всё же рекомендую iframe юзать, как более простое решение. Просто заходите в виджеты, добавляете новый, и меняете example.php под себя, чтобы надпись/текстовая область влезали без горизонтального скролла.
Отлично. спасибо за объяснение. Надеюсь, скрипт не будет создавать большую нагрузку на сайт?
Андрей, масштабирование загружаемой картинки в WP всяко нагрузку больше создаст. Другое дело, сколько доменов будет проверяться за раз)
Так и хочется сказать про ТИЦ и ИКС — хрен редьки не слаще. Но может, все к лучшему? И еще. Почему Анди — может делать толковые скрипты, а сервисы — нет?
Дима,
вот и я думаю, зачем этот ИКС нужен) Может, Яндекс с бирж имеет-таки процент какой.
Сервисы делать скрипты могут, но им главное, чтобы люди по рекламе кликали, а с бесплатных скриптов, в таком случае, не заработать.
Молодец, респектую) Технология отгадывания капчи в такой насущной проблеме))
Спасибо на добром слове. Но до пробивания капчи мне ещё далеко)
Огромное спасибо за статью и скрипт, пригодятся.
Всестороннее пожалуйста.
Будут проблемы с установкой — пишите, попытаемся решить)
Привет, дружище, огромное спасибо за скрипт. Но у меня две просьбы 1) можешь сделать так, чтобы домены без икс вообще не показывались ? 2) нельзя ли организовать выгрузку доменов в excel ?
Доброго дня!
Да пожалуйста.
На все случаи жизни запилить, конечно, не смогу)
Добавил в архив файл example_to_csv.php, который внешне выглядит так же, но при нажатии кнопки ok открывает новую вкладку, обрабатывает домены и отдаёт csv-файл, который можно и в Экселе открыть. Разделитель значений — ; (точка с запятой).
Спасибо. А где скачать то, в архиве его нету ?
Видимо, старый вариант закешировался.
Попробуйте по такой ссылке: https://a-panov.ru/ext/IKS-1.0.zip?v=1
О, теперь скачал, спасибо большое.
Залил всё на хостинг и не чего не заработало.
Без текста ошибки можно долго гадать, почему не работает.
На бесплатных хостингах часто отключены внешние соединения.
заработало. Я просто на домен заходил. А надо было на домен/example.php мой касяк. Я вот закинул 200 доменов в первый раз всё норм и во второй но вот после третьего не работает это нормально?
Уфф, работает
Вообще должно работать. Может, хостинг решил, что его сильно нагружают? Это как вариант.
А сколько максимум за раз можно проверить доменов?
Теоретически — сколько хостинг позволит. Практически — может как-нибудь напишу прогу в сотни потоков с целью получить бан от сервиса
Чтобы запустить скрипт «до упора», нужно добавить пару строк:
но выводить тогда нужно не в браузер, а в файл.
Пасаны? Как сделать что б с нулевым ИКСОМ не отображалось домены? А то так шлака много пересматривать надо.
Попробовать после
добавить
Благодарю))
Может быть кому-то будет полезно,
1. Для работы не подойдёт PHP старой версии. Если вы получаете ошибку «Parse error: syntax error, unexpected ‘[‘ in» — обновите PHP.
2. Если у вас скрипт не получает параметры, удостоверьтесь, что вы подключили библиотеку php_openssl.dll в php.ini, подробнее: stackoverflow.com/questions/5444249/unable-to-find-the-wrapper-https-did-you-forget-to-enable-it-when-you-config
3. Ограничение времени, если проверка проходит не до конца, необходимо создать файл .htaccess и в нём написать: php_value max_execution_time 10000 или любое другое значение в секундах. Сам я поменял значение глобально в php.ini -> max_execution_time.
Я столкнулся сразу с двумя проблемами, и раз решение бесплатное, решил так же поделиться решениями возможных проблем. Наверняка ведь кто-то ещё будет ставить по старинке на денвер или xampp.
Успехов! И спасибо за бесплатное решение.
Здравствуйте.
Огромное спасибо за дополнение!
Касательно символа [ — да, решил что уже можно использовать. С выхода PHP 5.4 прошло более 6.5 лет, и конструкцию array() можно заменить «новой» — []
Про ssl — как-то даже не подумал; ситуации же и правда разные бывают.
А по ограничению времени несколько ранее обсуждали. Правда, не всегда настройки разрешают правки лимита в скрипте или .htaccess или php.ini запилить,(
Благодарю!
Всегда пожалуйста!
Спасибо за скрипт
Здравствуйте!
Всегда пожалуйста.
example_to_csv.php работает только для 1 домена. Первого. Остальные не хочет проверять.
Евгений, здравствуйте!
Тут 2 варианта вижу: либо Вы используете ось от Apple, где перевод строки \r, либо ИКС есть только у одного домена.
По первому пункту — добавил замену разных переводов строки на один универсальный.
По второму — специально так делал, чтобы домены без параметра не попадали в результирующий файл, для некоторых это было важно. Но Вы правы, подобное поведение не особо интуитивно, поэтому тоже исправил, чтобы выводилось всё. Тем более, что сортировку в Экселе никто не отменял.
Нет у меня Хром и Windows. Проблема возникает не всегда.
Такой вопрос — вчера пару часов убил на попытку понять как сформировать POST запрос для скрипта example_to_csv.php
Думал как обычно отслежу в консоли, но почему то там запрос не отображается.
Как передать POST с внешнего источника, к примеру программы
пробовал типа example_to_csv.php?domainlist=devvver.ru&submit=ok и другие варианты но что то не работает.
Здравствуйте.
POST-запрос с помощью ссылки или адресной строки браузера отправить невозможно. В вебе для этого исторически используют формы) Другой вариант — AJAX, т. е. запрос с помощью JavaScript, но придётся заморочиться с кроссдоменными запросами.
Из пыха проще отправлять post-запросы с помощью curl. На страничке есть соответствующие примеры.
Для Яндекса не выдает значение
Это не баг, это фича Яндекса. Они для своего домена не показывают ИКС.
Здравствуйте. Этот скрипт проверяет только рабочие сайты? Если домен заблочен или удалённый, то результатов не будет?
Валерий, здравствуйте.
С праздником!
Скрипт обращается к Яндексу. Если в его базе содержится — результат будет.
Другой вопрос, насколько часто Яндекс обновляет/подчищает базу. Но, тут уже подсказать не могу.
Здравствуйте. Подскажите, куда именно вставлять строки:
set_time_limit(0); // снять ограничение времени
ignore_user_abort(TRUE); // если пользователь отсоединился — игнорировать
И как ограничить количество проверяемых доменов — если использовать скрипт как сервис для пользователей. Например, прописать, что за один раз проверка не более 1000 доменов.
Спасибо большое!
Здравствуйте.
В идеале — перед кодом, который должен выполняться очень долго. В каждый скрипт пихать не нужно, мало ли где ошибка зацикливания окажется, в результате каждая копия будет работать вечно, а потом и до лимитов дойдёт, так что сайты слягут.
Ограничить просто: подсчитывать количество уже прочеканных доменов, и когда их станет 1000 — сделать в цикле break. Или сразу оставить только 1000 доменов, остальные отбросить.
Извините, но я не силен в Ваших терминах. Что значит: «сделать в цикле break», объясните по простому — что и куда нужно внести. И в какой файл скрипта вносить строки ограничения времени перед кодом?
Если вы получаете ошибку «Parse error: syntax error, unexpected ‘[‘ in» — как выше сказали, у вас старая версия PHP.
Для запуска на старой версии заменить строки в файле YandexIks.php :
строка 14 private static $reference = заменить на private static $reference = array
строка 15 [ заменить на (
строка 25 ]; заменить на );
строка 54 $arr = []; заменитьна $arr = array();
удачи!
Здравствуйте.
Спасибо за дополнение.
Вы правы, конструкция [] появилась почти 8 лет назад, в пыхе 5.4, так что на древних версиях языка такого рода несовместимость можно словить. Правда, уже пых 7.4 зарелизили. Пора бы с ≤5.3 слезать)
Я поставил скрипт на 000webhost и скрипт не работает, даже страница не появляется. Подскажите что нужно сделать?
Здравствуйте.
В любых случаях, когда скрипт не работает, нужно активировать вывод ошибок. Или смотреть логи, туда ошибки пишутся.
Все заработало. Но когда я загружаю домены 100 и более, то выдает ошибку:»504 Gateway Time-out»
То-есть время вышло, но я изменил файл .htaccess на время 10000000000 секунд но все равно ошибка «504 Gateway Time-out». Как поступать с такой ошибкой