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

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

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

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

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
Саня Саня 3 года назад #

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

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

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

instantcms.ru/addons/googleindexingfree.html

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

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

IndexNow
Компонент

IndexNow

от Fuze
Скачать 4 033 загрузки

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

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

Изображение

www.indexnow.org/ru_ru/documentation

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

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

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

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

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

Нил™ Нил™ 3 года назад #
Комментарий удален

Еще от автора

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