WrinkleHQ

Indexing Guide

Set Up Search Console, Bing Webmaster and IndexNow

Verify your whole domain in Google Search Console with one DNS record, add it to Bing Webmaster Tools, submit a sitemap and send changed pages to IndexNow. This guide includes a working IndexNow script that uses only Python's standard library.

6 years
  1. Year 1Website
  2. Year 2Map Listings
  3. Year 3Booking Tool
  4. Year 4Front Desk
  5. Year 5Payments
  6. Year 6Reports

Same six pieces.
Years of lessons, one read.

Free to read. Most of this guide is open. The finishing pieces at the end come to you when you opt in.

The Short Version

  • A Domain property in Search Console covers every page, protocol and subdomain, and a DNS TXT record verifies it.
  • Bing Webmaster Tools can import your Search Console sites, which takes a minute.
  • Your sitemap should list only live pages at their final address, with true lastmod dates.
  • IndexNow needs a key file at your site root and a POST with a list of changed URLs.
  • Google does not use IndexNow. Bing and several other engines do.

Why Bother With All Three

A new site can sit for weeks before search engines find every page. A changed page can keep its old title in results long after you fixed it. These tools shorten that wait and show you what the engines see.

Search Console is Google's view of your site. It tells you which pages are indexed, which are not and why, and what searches you show up for. Bing Webmaster Tools is the same for Bing, which also feeds other search and AI tools. IndexNow is a simple way to tell Bing and others that a page changed, the moment it changes.

Set all three up on launch day. The data in Search Console starts the day you verify. You cannot go back and fill in the weeks you missed.

Verify a Domain Property With DNS

Search Console offers two kinds of property. A URL prefix property covers one exact start, such as the https bare domain. A Domain property covers everything under the domain. That means http and https, www and bare, and every subdomain. Pick Domain. It shows you the full picture and it does not break when you change hosts.

  1. In Search Console, add a property and choose Domain.
  2. Type the bare domain, such as example.com.
  3. Google shows a TXT record. Copy its value.
  4. In your DNS host, add a TXT record on the bare domain with that value.
  5. Go back and click Verify. If it fails, wait a few minutes and try again.
Type:  TXT
Name:  @            (the bare domain, example.com)
Value: google-site-verification=PASTE_THE_VALUE_GOOGLE_GIVES_YOU
TTL:   Auto

Leave the TXT record in place forever. Google checks it again from time to time. Remove it and you lose access to the property, along with its history.

Build a Clean Sitemap

A sitemap is a list of the pages you want found. It should be short and true. Put in only pages that return a 200 and are the final address. No redirects, no 404s, no pages marked noindex and no duplicates with and without a slash.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2026-09-28</lastmod>
  </url>
  <url>
    <loc>https://example.com/services/brakes/</loc>
    <lastmod>2026-09-15</lastmod>
  </url>
</urlset>

The lastmod date should change only when the page's main content changes. If your build stamps today's date on every page every time, engines learn to ignore it. Have the generator write the sitemap from the same list it builds pages from. Then a page that is gone cannot linger in it.

Point to the sitemap in robots.txt so every crawler can find it.

User-agent: *
Allow: /

Sitemap: https://example.com/sitemap.xml

Then submit it in Search Console under Sitemaps. Type sitemap.xml and press Submit. Come back in a day and check that the status says Success and the page count is right.

Add the Site to Bing Webmaster Tools

Sign in to Bing Webmaster Tools with any Microsoft account. It offers to import sites from Google Search Console. Choose that, sign in to Google when asked and pick your site. Bing copies the verified sites and their sitemaps. It takes about a minute.

If you would rather not link the two, add the site by hand and verify it with a CNAME record in DNS, the same way you did for Google. Then submit the sitemap under Sitemaps.

Bing's reports are worth a look. They often flag problems Google does not, such as missing meta descriptions or titles that are too long.

Set Up IndexNow

IndexNow works in two parts. First you prove you own the site by hosting a key file. Then you send a list of changed URLs to one shared address. Engines that take part share the list with each other.

Make a key. It can be 8 to 128 letters, numbers and dashes. A random hex string is easiest.

python -c "import secrets; print(secrets.token_hex(16))"
# prints something like 3f9c2a7e5b1d4c8f9a0e6b2d7c4f1a83
# save that exact string, with nothing else, as public/3f9c2a7e5b1d4c8f9a0e6b2d7c4f1a83.txt

Save a file named after the key, with a .txt ending, at the root of your site. Inside it, put the key and nothing else. Deploy, then open the file in a browser to make sure it loads.

Now send changed pages. This script uses only Python's standard library, so there is nothing to install.

# indexnow.py: tell IndexNow engines which pages changed.
# Usage: python indexnow.py https://example.com/page-one/ https://example.com/page-two/
import json
import sys
import urllib.error
import urllib.request

HOST = "example.com"
KEY = "3f9c2a7e5b1d4c8f9a0e6b2d7c4f1a83"
KEY_LOCATION = f"https://{HOST}/{KEY}.txt"
ENDPOINT = "https://api.indexnow.org/indexnow"


def submit(urls):
    body = json.dumps({
        "host": HOST,
        "key": KEY,
        "keyLocation": KEY_LOCATION,
        "urlList": urls,
    }).encode("utf-8")
    req = urllib.request.Request(
        ENDPOINT,
        data=body,
        method="POST",
        headers={"Content-Type": "application/json; charset=utf-8"},
    )
    try:
        with urllib.request.urlopen(req, timeout=30) as resp:
            return resp.status, resp.read().decode("utf-8", "replace")
    except urllib.error.HTTPError as e:
        return e.code, e.read().decode("utf-8", "replace")


if __name__ == "__main__":
    urls = [u for u in sys.argv[1:] if u.startswith(f"https://{HOST}/")]
    if not urls:
        sys.exit("give at least one full URL on " + HOST)
    status, text = submit(urls)
    print(status, text.strip() or "(empty body)")
    sys.exit(0 if status in (200, 202) else 1)

Run it after each deploy with the pages that changed. A 200 means the list was taken. A 202 means it was taken and the key is still being checked, which is normal the first time. Anything else means something is wrong, and the script exits with an error so your deploy log shows it.

Read the Three Reports That Matter

Search Console has a lot of screens. Three of them do most of the work for a local business site.

Pages. This shows how many pages are indexed and lists every reason a page is not. Some reasons are fine. A page with a redirect or a page you marked noindex should be left out. Others need work. "Discovered, not indexed" means Google knows the page exists but has not crawled it yet. "Crawled, not indexed" means it looked and passed. Read the reasons once a week for the first month.

Performance. This shows the searches you appeared for, how often and how many clicked. Sort by impressions. Look for searches where you show up a lot but few people click. The page title and description are often the fix.

URL Inspection. Paste one address in the bar at the top. It tells you if that page is indexed, which canonical Google chose and when it last crawled. After you fix a page, you can ask Google to crawl it again from here. Use this for a few key pages, not the whole site.

Make It Part of Every Deploy

Tools you run by hand get forgotten. Add the IndexNow step to the same script that deploys your site, right after the deploy succeeds. If the deploy fails, nothing gets sent. If the send fails, the deploy log shows it.

Keep the key in your project, next to the script, since it is public anyway. It sits in a file anyone can load. What protects you is that only you can put a file on your own domain.

You do not need to ping Google at all. Its old sitemap ping address was retired. Keep the sitemap current and linked in robots.txt, and Google will read it on its own.

What the Finishing Pieces Contain

With the steps above you have Google, Bing and IndexNow set up and working. The finishing pieces make it run on its own. They hold a script that reads your sitemap and sends only pages whose date changed, in batches, and retries on the next run if a send fails. They also hold the table of IndexNow replies and what to do about each, the traps that keep pages out of the index, and a first week checklist. Enter your email to open them. Next, learn to measure AI search traffic in GA4.

The finishing pieces

Get the Rest of This Guide

You have the method. The finishing pieces are the parts you copy straight into your own work:

  • Send Only What Changed
  • A Deploy Script That Sends Changes
  • IndexNow Replies and What to Do
  • Traps That Keep Pages Out
  • The First Week Checklist

Questions People Ask

Does Google use IndexNow?

No. Google reads your sitemap and crawls on its own schedule. IndexNow reaches Bing and other engines that take part.

Should I pick a Domain property or a URL prefix property?

Pick Domain. It covers every version of your site in one place and verifies with a single DNS record.

How long until my pages show up in Google?

Often a few days for a small site with a clean sitemap, sometimes weeks. Search Console shows you which pages are waiting and why.

Is it bad to send the same URLs to IndexNow over and over?

It wastes the engines' time and can get your requests slowed down. Send a page only when it really changed.

We sell time

Get Years of Building Switched On in Hours

A thirty minute call. A written price. Nothing built until you say yes.

Get Your Time Back