Несколько действий, в конце которых на каждой странице сайта админ увидит специальную кнопку или ссылку, при нажатии на которую он сможет отправить пинг в Яндекс, Бинг и Гугл с извещением о создании, изменении страницы.
Сейчас я использую для яндекса и гугла две специальные страницы на сайте с формами через которые и отправляю запросы. Решил немного упростить процедуру и разместить спец кнопку на каждую страницу сайта, что бы отправлять такие запросы — когда нужно — в один клик.
1. В папкe core/ajax/ создаём файл с именем pingator.php (или просто скачиваем архив со всеми файлами ниже), содержимое этого файла :
<?php include(PATH.'/core/ajax/ajax_core.php'); if (!$inUser->is_admin) { cmsCore::halt(); } $uri = cmsCore::request('uri', 'str', ''); //setting //ключ для яндекса, txt файл с таким же именем и таким же содержимым должен лежать в корне сайта $y_key = 'ABSJDIIDJLJOSOSOOSOO'; if($uri){ $yaanswers = ''; $ganswers = ''; $page = 'https://'.$_SERVER['HTTP_HOST'].$uri; //yandex $yasha = 'https://yandex.com/indexnow?url='.$page_encoded.'&key='.$y_key; $yaanswers .= $yandexanswer; if ($yandexanswer === false) { $yaanswers .= 'Ой, что-то пошло не так...'; } $action = 'URL_UPDATED'; $url = $page; //папка где лежат файлы для запросов к гуглу include PATH.'/ping/php/indexing.php'; echo 'Результаты для: '.$page ; echo '<br>==============<br>'; echo '<strong>Yandex:</strong><br>'; echo $yaanswers; echo '<br>'; echo '<strong>Google:</strong><br>'; echo $ganswers; } cmsCore::halt(); ?>
измените в строке $y_keys ключ на свой и если нужно название папки ping на свою.
2. Для гугла я использовал готовый код для работы с вложенной библиотекой от гугл, предлагаю вам взять за основу его же. Скачайте здесь архив с файлами распакуйте архив, закачайте файлы в вашу папку /ping.
3. Откройте в папке /ping/php/ файл indexing.php и замените содержимое на это:
<?php require_once PATH.'/ping/php/vendor/autoload.php'; $data = [ 'result' => 'success' ]; $type = 'URL_UPDATED'; $data['result'] = 'error'; $data['error'] = 'URL не является корректным.'; } $client = new Google_Client(); $client->setAuthConfig(PATH.'/ping/php/api-project-696409.json'); $client->addScope('https://www.googleapis.com/auth/indexing'); $httpClient = $client->authorize(); $endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish'; if ($action == 'get') { $response = $httpClient->get('https://indexing.googleapis.com/v3/urlNotifications/metadata?url=' . urlencode($url)); } else { 'url' => $url, 'type' => $type ]); $response = $httpClient->post($endpoint, ['body' => $content]); } $data['body'] = (string) $response->getBody();
4. Откройте в той же папке файл api-project-696409.json и заполнить его (можно просто скопировать содержимое файла ключа полученного в консоли Google)
{ "type": "service_account", "project_id": "заполнить своим", "private_key_id": "заполнить", "private_key": "заполнить", "client_email": "заполнить", "client_id": "заполнить", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "заполнить" }
Там где написано «заполнить» заполните своими данными полученными в консоли Google Api, если не знаете с чего начать, можете посмотреть инструкцию по получению кода в гугл консоли здесь itchief.ru/php/use-google-indexing-api вам нужны шаги 1,2,3,4
5.И последнее. В файл шаблона template.php внизу перед </body> вставьте это:
<?php if($inUser->is_admin){ ?> <span id="pingbtn" style="position:fixed; left:10px; bottom:10px; padding:10px; background:url(путь к иконке для кнопки) center no-repeat #7ac3fd; width:30px; height:30px; line-height:30px; border-radius:5px; box-shadow: 1px 1px 3px 3px #c1c1c1; display:block; border:1px solid #fff;" onclick="Pingator();"></span> <div id="pingresoverlay" style="display:none; position:fixed; top:0; left:0; right:0; bottom:0; position:fixed; background:#000; width:100%; height:100%; overflay:hidden auto; opacity:0.6; z-index:100;" onclick="$('#pingres').fadeOut();$('#pingresoverlay').fadeOut();"></div> <div id="pingres" style="display:none; position:fixed; top:0; left:0; right:0; bottom:0; margin:auto; padding:20px; position:fixed; background:#fff; color:#000; width:400px; max-width:100%; height:300px; overflay:hidden auto; z-index:101;"></div> <script> function Pingator(){ $('#pingbtn').css('background', 'url(/images/progress.gif) center no-repeat #cccccc'); $.ajax({ url: '/core/ajax/pingator.php', method: 'post', dataType: 'text', data:{uri:'<?php echo $_SERVER['REQUEST_URI']; ?>'}, success: function(data){ $('#pingres').html(data); $('#pingresoverlay').fadeIn(); $('#pingres').fadeIn(); $('#pingbtn').css('background', 'url(путь к иконке для кнопки) center no-repeat #9bafb9'); } }); } </script> <?php } ?>
там, где написано «путь к иконке» вставьте ссылку типа /images/icon.png на какую нибудь иконку, которая будет отображаться на кнопке.
В стилях указано, что кнопка для пинга будет зафиксирована снизу,
чтобы убрать фиксацию, уберите это: position:fixed; left:10px; bottom:10px и можете вставить кнопку туда, где вам удобно.
Результат. После нажатия на кнопку.
появляется окно с ответами от яндекса и гугла.
От яндекса признак успешного запроса — «success:true» в ответе
Пример ответа от гугла при успешном запросе — на скрине. При ошибке там сообщение об ошибке.
Пока — всё.
Дополнено 27.03.2022
Во втором пункте я ссылаюсь на источник кода с гитхаба и говорю, что там есть все нужные файлы включая нужную библиотеку от гугл. Я скачивал давно и был уверено что она (библиотека) там есть, сегодня посмотрел нет.
В общем, чтобы не усложнять, собрал все файлы (включая библиотеку Google) со своего рабочего проекта разложенные по папкам, как я описал в этой инструкции и загрузил на Яндекс Диск (сюда прикрепить не позволяет размер файла). Можете взять disk.yandex.ru/d/Fd-4XP9WGnLZ5w
Вам нужно распаковать и исправить файл api-project-696409.json согласно пункту 4 этой инструкции, загрузить файлы в корень сайта, и выполнить пункт 5 этой инструкции.
P.S. Конечно не понятно, зачем гугл так усложняет, можно было сделать также просто как Яндекс и Бинг, но как то так.
Реклама #
Саня 1 год назад #
А кто нибудь сможет преобразовать инструкцию или в виде компонента для второй ветки?
Loadырь 1 год назад #
Уже instantcms.ru/addons/se-ping.html
Fuze 1 год назад #
Это не то. Те пинги давно устарели. Здесь речь про indexnow.
instantcms.ru/addons/googleindexingfree.html
Fuze 1 год назад #
В общем обновил я свой устаревший компонент Ping до IndexNow, пользуйтесь.
IndexNow
&$!#% 1 год назад #
Я не сразу обратил внимание, потом только дошло)) IndexNow устроен таким образом, что не обязательно отправлять запросы по отдельности в каждую поисковую систему.
www.indexnow.org/ru_ru/documentation
Поэтому не обязательно делать опции для Бинга или чего-то еще. Если отправлять только в Яндекс, то в Бинг эти запросы тоже сразу же прилетают. Это я заметил в панели вебмастера Бинг. Вроде не отправлял ничего, но всё само прилетело))
Fuze 1 год назад #
Да, я видел. Но решил, что пока пусть будет так, т.к. протокол новый.
F_a_R_i_D 1 год назад #
Интересно с гуглом тоже самое происходит?
Нил™ 1 год назад #
Что то же самое? Получает ли Гугл уведомления отправленные через indexnow? Нет. Для него уведомление отправляется отдельно.