Xone IndexNow

Working Curl code to bulk send URLs using İndexNow API

Using Curl, we will send an array of URLs using the İndexNow API protocol, using DomDocument() from the standard sitemap.xml file as the source of the list of URLs.

We focus on technologies that, allow us to deliver high performing, less error prone and intelligible code

Let's consider the simplest option, let's take PHP, Ajax, XML, Json and Bootstrap 5 as a basis.

The example will consist of 3 PHP files: index.php request submission form, confIndexNow.php configuration file and ajax request ajaxindexnow.php.


The index.php file contains the request submission form.

Copy code

  1. <?php
  2. // index.php Форма отправки запроса
  3. include("confIndexNow.php"); // Загрузка конфигурации
  4. echo "<form id=\"form\" method=\"post\" action=\"ajaxindexnow.php\" enctype=\"multipart/form-data\"><div class=\"g-3\">\n";
  5. echo "<div id=\"remove-submit\" class=\"row\">"; // Remove
  6. echo "<div class=\"col-12\"><label for=\"uEngine\" class=\"form-label\">Куда отправить запрос?</label><select class=\"form-select required\" id=\"uEngine\" name=\"uEngine\" required=\"required\">
  7. <option value=\"api.indexnow.org\">отправить в IndexNow</option>
  8. <option value=\"www.bing.com\">отправить в Microsoft Bing</option>
  9. <option value=\"yandex.com\">отправить в Yandex</option>
  10. </select></div>";
  11. echo "<input type=\"hidden\" name=\"IndexNowKey\" id=\"IndexNowKey\" value=\"$IndexNowKey\">";
  12. echo "<input type=\"hidden\" name=\"uRoor\" id=\"uRoor\" value=\"$uRoor\">";
  13. echo "<input type=\"hidden\" name=\"uKeyLocation\" id=\"uKeyLocation\" value=\"$uKeyLocation\">";
  14. echo "<input type=\"hidden\" name=\"uMapLocation\" id=\"uMapLocation\" value=\"$uMapLocation\">";
  15. echo "<div class=\"col-12\"><button class=\"mt-3 w-100 btn btn-block btn-primary btn-lg submit\" type=\"submit\" id='submit_btn'>Отправить запрос</button></div>";
  16. echo "</div>"; // Remove
  17. echo "</form>";
  18. ?>

The confIndexNow.php file defines the main parameters: IndexNow key, site URL with https or http, IndexNow key file location, sitemap.xml file location.

Copy code

  1. <?php
  2. // confIndexNow.php Файл конфигурации
  3. $IndexNowKey="f2b79d09125445e889c945ea96ac8e7d"; // IndexNow ключ
  4. $uRoor="https://site.com"; // URL сайта с https или http
  5. $uKeyLocation="https://site.com/f2b79d09125445e889c945ea96ac8e7d.txt"; // Расположение файла ключа IndexNow. Настоятельно рекомендуем разместить текстовый файл ключа в корневой каталог вашего сайта.
  6. $uMapLocation="https://site.com/sitemap.xml"; // Расположение файла sitemap.xml
  7. ?>

File ajaxindexnow.php, Curl sending request using İndexNow API.

Copy code

  1. <?php
  2. // ajaxindexnow.php Отправка запроса
  3. $IndexNowKey = $_POST['IndexNowKey']; // IndexNow ключ
  4. $uRoor = $_POST['uRoor']; // URL сайта
  5. $uMapLocation = $_POST['uMapLocation']; // Расположение файла sitemap.xml
  6. $uKeyLocation = $_POST['uKeyLocation']; // Расположение файла ключа IndexNow
  7. $uEngine = $_POST['uEngine']; // Куда отправить запрос
  8. $HOST = explode("://", $uRoor); $uHost="$HOST[1]"; $uHost = rtrim( $uHost, "/" ); // Зчищаем URL сайта
  9. ////////////////////////////////////
  10. $count = 0;
  11. $limit = 10000; // Ограничение количества
  12. $dom = new DomDocument();
  13. $dom->load("$uMapLocation");
  14. $data = $dom->getElementsByTagName('loc');
  15. foreach ($data as $node) {
  16. $thisurl = $node->textContent;
  17. $thisbasename = basename($thisurl);
  18. $count++;// старт = 0
  19. if($count == $limit)
  20. break;//if limit == ограничение
  21. $BLGe[]=$thisurl; // массив URLs
  22. }
  23. ///////////////////////////////////
  24. $data = array('host' => "$uHost", 'key' => "$IndexNowKey", 'keyLocation' => "$uKeyLocation", 'urlList' =>array_reverse(array_reverse($BLGe))); // Общий массив
  25. $data_string = json_encode($data);
  26. $ch = curl_init("https://$uEngine/indexnow");
  27. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json; charset=utf-8'));
  28. curl_setopt($ch, CURLOPT_POST, 1);
  29. curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
  30. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  31. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  32. curl_setopt($ch, CURLOPT_HEADER, false);
  33. $res = curl_exec($ch);
  34. $result = curl_exec($ch);
  35. $http_code = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
  36. curl_close($ch);
  37. $res = json_encode($res, JSON_UNESCAPED_UNICODE);
  38. if ($http_code == 200) { echo "<div class=\"alert alert-success text-center\" role=\"alert\">Отет -$http_code <b>Список в количестве <span class=\"text-danger\">$count</span> URL успешно отправлен</b></div>"; }
  39. elseif ($http_code == 202) { echo "<div class=\"alert alert-primary text-center\" role=\"alert\">Отет -$http_code <b>Принято. URL-адреса в количестве <span class=\"text-danger\">$count</span> получены, ожидается проверка ключа IndexNow</b></div>"; }
  40. elseif ($http_code == 400) { echo "<div class=\"alert alert-danger text-center\" role=\"alert\">Отет -$http_code <b>Неверный запрос. Неверный формат</b></div>"; }
  41. elseif ($http_code == 403) { echo "<div class=\"alert alert-danger text-center\" role=\"alert\">Отет -$http_code <b>Запрещено. Недействительный ключ (например, ключ не найден, файл найден, но ключ отсутствует в файле)</b></div>"; }
  42. elseif ($http_code == 422) { echo "<div class=\"alert alert-danger text-center\" role=\"alert\">Отет -$http_code <b>Необрабатываемый объект. URL-адреса не принадлежат хосту или ключ не соответствует схеме в протоколе</b></div>"; }
  43. elseif ($http_code == 429) { echo "<div class=\"alert alert-danger text-center\" role=\"alert\">Отет -$http_code <b>Слишком много запросов. Расчитывается какпотенциальный спам</b></div>"; }
  44. else { echo "<div class=\"alert alert-danger text-center\" role=\"alert\">$http_code -<b> Ошибка отправки списка URL</b></div>"; }
  45. ?>

Using the button below, use Curl to send an array of URLs using the İndexNow API protocol, using the standard sitemap.xml file as the source of URLs.

Submit an array of URLs

Try Xone IndexNow free for 3 days

Instant indexing in Yandex, Microsoft Bing, IndexNow.

Start Free Trial