Пинг поисковых систем для первой ветки

+8
573
Пинг поисковых систем для первой ветки

Несколько действий, в конце которых на каждой странице сайта админ увидит специальную кнопку или ссылку, при нажатии на которую он сможет отправить пинг в Яндекс, Бинг и Гугл с извещением о создании, изменении страницы.

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

1. В папкe core/ajax/ создаём файл с именем pingator.php (или просто скачиваем архив со всеми файлами ниже), содержимое этого файла :

  1. <?php
  2. define('PATH', $_SERVER['DOCUMENT_ROOT']);
  3. include(PATH.'/core/ajax/ajax_core.php');
  4. if (!$inUser->is_admin) { cmsCore::halt(); }
  5. $uri = cmsCore::request('uri', 'str', '');
  6.  
  7. //setting
  8. //ключ для яндекса, txt файл с таким же именем и таким же содержимым должен лежать в корне сайта
  9. $y_key = 'ABSJDIIDJLJOSOSOOSOO';
  10.  
  11. if($uri){
  12. $yaanswers = '';
  13. $ganswers = '';
  14. $page = 'https://'.$_SERVER['HTTP_HOST'].$uri;
  15. $page_encoded = urlencode($page);
  16.  
  17. //yandex
  18. $yasha = 'https://yandex.com/indexnow?url='.$page_encoded.'&key='.$y_key;
  19. $yandexanswer = file_get_contents($yasha);
  20. $yaanswers .= $yandexanswer;
  21. if ($yandexanswer === false) {
  22. $yaanswers .= 'Ой, что-то пошло не так...';
  23. }
  24.  
  25. //google
  26. $action = 'URL_UPDATED';
  27. $url = $page;
  28.  
  29. //папка где лежат файлы для запросов к гуглу
  30. include PATH.'/ping/php/indexing.php';
  31.  
  32. echo 'Результаты для: '.$page ;
  33. echo '<br>==============<br>';
  34. echo '<strong>Yandex:</strong><br>';
  35. echo $yaanswers;
  36. echo '<br>';
  37.  
  38. var_dump($data['body']);
  39. $ganswers .= ob_get_clean();
  40. echo '<strong>Google:</strong><br>';
  41. echo $ganswers;
  42. }
  43.  
  44. cmsCore::halt();
  45. ?>
  46.  

измените в строке $y_keys ключ на свой и если нужно название папки ping на свою.

2. Для гугла я использовал готовый код для работы с вложенной библиотекой от гугл, предлагаю вам взять за основу его же. Скачайте здесь архив с файлами распакуйте архив, закачайте файлы в вашу папку /ping. 

3. Откройте в папке /ping/php/ файл indexing.php и замените содержимое на это:

  1. <?php
  2.  
  3. require_once PATH.'/ping/php/vendor/autoload.php';
  4.  
  5. $data = [
  6. 'result' => 'success'
  7. ];
  8.  
  9. $type = 'URL_UPDATED';
  10.  
  11.  
  12. if (!filter_var($url, FILTER_VALIDATE_URL)) {
  13. $data['result'] = 'error';
  14. $data['error'] = 'URL не является корректным.';
  15. echo json_encode($data);
  16. exit();
  17. }
  18.  
  19. $client = new Google_Client();
  20. $client->setAuthConfig(PATH.'/ping/php/api-project-696409.json');
  21. $client->addScope('https://www.googleapis.com/auth/indexing');
  22. $httpClient = $client->authorize();
  23. $endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish';
  24. if ($action == 'get') {
  25. $response = $httpClient->get('https://indexing.googleapis.com/v3/urlNotifications/metadata?url=' . urlencode($url));
  26. } else {
  27. $content = json_encode([
  28. 'url' => $url,
  29. 'type' => $type
  30. ]);
  31. $response = $httpClient->post($endpoint, ['body' => $content]);
  32. }
  33.  
  34. $data['body'] = (string) $response->getBody();
  35.  
  36.  

4. Откройте в той же папке файл api-project-696409.json и заполнить его (можно просто скопировать содержимое файла ключа полученного в консоли Google)

  1. {
  2. "type": "service_account",
  3. "project_id": "заполнить своим",
  4. "private_key_id": "заполнить",
  5. "private_key": "заполнить",
  6. "client_email": "заполнить",
  7. "client_id": "заполнить",
  8. "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  9. "token_uri": "https://oauth2.googleapis.com/token",
  10. "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  11. "client_x509_cert_url": "заполнить"
  12. }
  13.  

Там где написано «заполнить» заполните своими данными полученными в консоли  Google Api, если не знаете с чего начать, можете посмотреть инструкцию по получению кода в гугл консоли здесь itchief.ru/php/use-google-indexing-api вам нужны шаги 1,2,3,4

5.И последнее. В файл шаблона template.php внизу перед </body> вставьте это:

  1. <?php if($inUser->is_admin){ ?>
  2. <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>
  3. <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>
  4. <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>
  5. <script>
  6. function Pingator(){
  7. $('#pingbtn').css('background', 'url(/images/progress.gif) center no-repeat #cccccc');
  8. $.ajax({
  9. url: '/core/ajax/pingator.php',
  10. method: 'post',
  11. dataType: 'text',
  12. data:{uri:'<?php echo $_SERVER['REQUEST_URI']; ?>'},
  13. success: function(data){
  14. $('#pingres').html(data);
  15. $('#pingresoverlay').fadeIn();
  16. $('#pingres').fadeIn();
  17. $('#pingbtn').css('background', 'url(путь к иконке для кнопки) center no-repeat #9bafb9');
  18. }
  19. });
  20. }
  21. </script>
  22. <?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. Конечно не понятно, зачем гугл так усложняет, можно было сделать также просто как Яндекс и Бинг, но как то так.

0
Саня Саня 1 год назад #

А кто нибудь сможет преобразовать инструкцию или в виде компонента для второй ветки? 

0
Loadырь Loadырь 1 год назад #
0
Fuze Fuze 1 год назад #

Это не то. Те пинги давно устарели. Здесь речь про indexnow.

instantcms.ru/addons/googleindexingfree.html

+2
Fuze Fuze 1 год назад #

В общем обновил я свой устаревший компонент Ping до IndexNow, пользуйтесь.

IndexNow
Компонент

IndexNow

от Fuze
Скачать 2 968 загрузок

0
&$!#% &$!#% 1 год назад #

Я не сразу обратил внимание, потом только дошло)) IndexNow устроен таким образом, что не обязательно отправлять запросы по отдельности в каждую поисковую систему. 

Изображение

www.indexnow.org/ru_ru/documentation

Поэтому не обязательно делать опции для Бинга или чего-то еще. Если отправлять только в Яндекс, то в Бинг эти запросы тоже сразу же прилетают. Это я заметил в панели вебмастера Бинг. Вроде не отправлял ничего, но всё само прилетело))

0
Fuze Fuze 1 год назад #

Да, я видел. Но решил, что пока пусть будет так, т.к. протокол новый.

0
F_a_R_i_D F_a_R_i_D 1 год назад #

Интересно с гуглом тоже самое происходит?

0
Нил™ Нил™ 1 год назад #

Что то же самое? Получает ли Гугл уведомления отправленные через indexnow? Нет. Для него уведомление отправляется отдельно.

Еще от автора

Капча на сайт или разделы сайта
Если нужно, закрыть весь сайт или некоторые его разделы каптчей.
Генератор карты сайта в формате txt на лету без крона
Вообще то где то тут уже есть вполне рабочие генераторы карты для первой ветки, но этот вариант тоже имеет право быть.
Автопостинг с канала в Telegram в ленту активности сайта (Первая ветка)
В прошлом посте я демонстрировал схему автопостинга сообщений из ленты активности сайта на канале в Telegram.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.