Over 80,000+ companies already use IndexNow every day
The IndexNow protocol allows you to automatically inform search engines about changes to the site, the appearance of new ones, updating or deleting already indexed pages without waiting for the next crawl by the indexing robot.
IndexNow
Microsoft Bing
Yandex
Generate API Key
The API key is required to match ownership of the domain along with submitted URLs; must be at least 8 characters long.
Place your API key in the root directory in txt format. This will help verify ownership of submitted URLs.
Webmasters can submit individual or bulk URLs. Just send the key location as a URL parameter.
To use IndexNow, upload, preferably in the root directory, a UTF-8 encoded text file with an API key
Generate API Key:
Generate your unique IndexNow key:Download and upload the UTF-8 encoded key file to your site in the root directory (recommended),
the file must contain the key
the address of the file should look something like this,
https://www.example.com/
instead of www.example.com your domain
The text file of the key is located in the root directory of your site (http://www.example.com/), in this option it is not required to specify the location of the key file.
HTTP request, to whom we send the URL - Yandex (yandex.com), Microsoft Bing (www.bing.com), IndexNow (api.indexnow.org), url - page of your site, key - key confirming the rights to the site.
Placing one or more text key files located not in the root directory, but in other site folders, for example, in the MyFolder folder (http://www.example.com/MyFolder), in this option, you need to specify the location of the key file using the keyLocation parameter.
HTTP request, to whom we are sending the URL - Yandex (yandex.com), Microsoft Bing (www.bing.com), IndexNow (api.indexnow.org), url - page of your site, key - key confirming the rights to the site, keyLocation - the location of the text file with the key.
To send a list of URLs, specify in the JSON content:
Host: <searchengine> - URL provided by search engines, replace
"host": - address of your site
"key": - the key to confirm the rights to the site
"keyLocation": - location of the key text file
"urlList": - the list of URLs you want to send data about, the list must not exceed 10,000 URLs
Request Format
POST /IndexNow HTTP/1.1 Content-Type: application/json; charset=utf-8 Host: <searchengine> { "host": "www.example.com", "key": "192b898092b24bc58786cf5c8e926fd3 ", "keyLocation": "https://www.example.com/192b898092b24bc58786cf5c8e926fd3 .txt", "urlList": [ "https://www.example.com/url1", "https://www.example.com/folder/url2", "https://www.example.com/url3" ] }
The location of the key file defines the list of URLs that can be included in this key.
The key file located at: http://example.com/catalog/
URLs are accepted for indexing
http://example.com/catalog/show?item=23
http://example.com/catalog/show?item=233&user=3453
URLs are considered invalid and will not be accepted for indexing
http://example.com/image/show?item=23
http://example.com/image/show?item=233&user=3453
To get the most out of using the IndexNow protocol, it is highly recommended that you place the key text file in the root directory of your website.
Request Format | ||
---|---|---|
HTTP code | Response | Reasons |
200 | OK | URL submitted successfully |
202 | Accepted | URL received. IndexNow key validation pending. |
400 | Bad request | Invalid format |
403 | Forbidden | In case of key not valid (e.g. key not found, file found but key not in the file) |
422 | Unprocessable Entity | In case of URLs which don’t belong to the host or the key is not matching the schema in the protocol |
429 | Too Many Requests | Too Many Requests (potential Spam) |
Instant indexing in Yandex, Microsoft Bing, IndexNow.
Send an array of URLs using the IndexNow protocol
Get more customers with Xone IndexNow universal indexing module
instant indexing
The Xone IndexNow indexing module will help you dominate the search engines, quickly inform you about all changes to the content on the site, the appearance of new ones, updating or deleting already indexed pages.
Discover a comprehensive marketing solution that drives business growth, powerful features to increase productivity and increase sales.
Feel the freedom and power of the IndexNow protocol, use just one universal indexing module Xone, promoting products and services in search engines for an unlimited number of websites.
How to use Curl to submit URLs İn Bulk With İndexNow API?
Two cases of the appearance of a list of URLs are considered, in which arrays of links are found, but all of them are found from different sources without exception.
The first will be the sitemap.xml file that almost every site has, the next one is a simple text file.
Below are examples of using Curl to bulk send URLs using the İndexNow API from a sitemap.xml file or plain text file that offers a link request, each link starts with the string (download file).
Working Curl code to bulk send URLs using the İndexNow API from a text file.
Let's slightly change the code below, move the parameters to a separate file, add a form for sending data via AJAX and display html (response) of the result of the JSON request. Full code and manual »
<?php ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); //-- Options --// $count = 0; $dlm = "|~|"; // Pseudo delimiter $dlmBreack = "\n"; // Delimiter $dlmCount = "10000"; // Limiting the number of lines read from the file $txtfile = "url.txt"; // Data file containing a list of URLs $IndexNowKey = "6352b4ae24df467dbffe0adb9438cd28"; // Key IndoxNew $uRoor = "example.com"; // Domain $uHttps = "https"; // http or https $uEngine = "www.bing.com"; // To whom we transfer data - yandex.com, www.bing.com or api.indexnow.org //-- Options --// $uRLS = "".$uHttps."://$uRoor/"; // Final Url with protocol http or https $txtfile = preg_replace("!^s+!m", "", $txtfile); // Trim spaces at the beginning of the string $txtfile = preg_replace("![\n\r]+\s*[\n\r]+!", "\r\n", $txtfile); // Remove empty lines $DoLink = file_get_contents($txtfile); $Link = explode($dlmBreack, $DoLink, $dlmCount); for($in = 0; $in < count($Link); $in++){ $Urls = explode($dlm, $Link[$in]); $uUrl = $Urls[0]; // String with link if ($uUrl!=='') { $BLGe[]="$uUrl"; $count++; } // Create an array of links } $data = array('host' => "$uRoor", 'key' => "$IndexNowKey", 'keyLocation' => "".$uRLS."".$IndexNowKey.".txt", 'urlList' =>array_reverse(array_reverse($BLGe))); $data_string = json_encode($data); $ch = curl_init("https://$uEngine/indexnow"); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json; charset=utf-8')); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); $result = curl_exec($ch); $http_code = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $res = json_encode($res, JSON_UNESCAPED_UNICODE); if ($http_code == 200) { echo "<div class=\"alert alert-success text-center\" role=\"alert\">$http_code <b>OK - Prepared and successfully submitted $count URLs</b></div><div class=\"alert alert-secondary text-center\" role=\"alert\">site - <b>$uHost</b>, request - <b>$uEngine</b></div>"; } elseif ($http_code == 202) { echo "<div class=\"alert alert-primary text-center\" role=\"alert\">$http_code <b>Prepared and sent successfully $count URLs, pending verification of the IndexNow key</b></div><div class=\"alert alert-secondary text-center\" role=\"alert\">site - <b>$uHost</b>, request - <b>$uEngine</b></div>"; } elseif ($http_code == 400) { echo "<div class=\"alert alert-danger text-center\" role=\"alert\">$http_code <b>Invalid request. Wrong format</b></div><div class=\"alert alert-secondary text-center\" role=\"alert\">site - <b>$uHost</b>, request - <b>$uEngine</b></div>"; } elseif ($http_code == 403) { echo "<div class=\"alert alert-danger text-center\" role=\"alert\">$http_code <b>Forbidden. Invalid key (e.g. key not found, file found but key not in file)</b></div><div class=\"alert alert-secondary text-center\" role=\"alert\">site - <b>$uHost</b>, request - <b>$uEngine</b></div>"; } elseif ($http_code == 422) { echo "<div class=\"alert alert-danger text-center\" role=\"alert\">$http_code <b>Unprocessed object. The URLs do not belong to the host or the key does not match the scheme in the protocol</b></div><div class=\"alert alert-secondary text-center\" role=\"alert\">site - <b>$uHost</b>, request - <b>$uEngine</b></div>"; } elseif ($http_code == 429) { echo "<div class=\"alert alert-danger text-center\" role=\"alert\">$http_code <b>Too many requests. Counted as potential spam</b></div><div class=\"alert alert-secondary text-center\" role=\"alert\">site - <b>$uHost</b>, request - <b>$uEngine</b></div>"; } else { echo "<div class=\"alert alert-danger text-center\" role=\"alert\">$http_code -<b> Error sending list of URLs</b></div>"; ?>
Using the buttons below, submit an array of URLs using the İndexNow API from a sitemap.xml file or a text file.
Happy Customers
IndexNow
8,376 Rating
If the URLs are standards compliant, IndexNow ensures that search engines are aware of changes to your site based on scheduling logic and crawl quota.
We strongly recommend that you do not send the same URL many times a day. If pages are edited frequently, then it is advisable to wait 10 minutes between changes before notifying search engines, if pages are updated constantly (eg time, weather, exchange rates), it is advisable not to use IndexNow for every change.
Yes, to notify search engines of new broken links, you can submit broken pages (http 404, http 410).
This code indicates that you are sending too many requests in a short period of time, reduce the frequency of sending requests and try again later.
Yes, if your websites use different content management systems, each can use its own key located at the root of the host.
Yes, although a sitemap file serves as an easy way to inform search engines about all the pages on a site.
With IndexNow, you don't have to wait until the sitemap is crawled, but directly notify search engines about the appearance of new, updating or deleting already indexed pages.
Instant indexing in Yandex, Microsoft Bing, IndexNow.