{% extends "base.html" %} {% set active_page = 'projects' %} {% block title %}Projects & keys — IndexNow Tool{% endblock %} {% block content %}

Projects & keys

Each project is a name, a host, and the IndexNow key that host serves. Keys are stored in the local database.

{% set editing = rows | selectattr('name', 'equalto', edit) | first %}

{{ 'Edit project: ' + editing['name'] if editing else 'Add a project' }}

Your label for this site. Renaming keeps the URL history attached.

Host only. A pasted full URL gets trimmed down automatically. Every submitted URL must match this host exactly.

8-128 characters, letters, numbers and dashes only.

Only needed when the key file is not at the host root. Verify checks this exact URL.

{% if editing %}{% endif %}

Before your first run

  1. Pick any key you like, 8-128 characters of A-Z a-z 0-9 -.
  2. Put it in a text file whose name is the key plus .txt, containing only the key.
  3. Upload it to the root of the host, for example https://www.example.com/<key>.txt.
  4. Add the project here, then press Verify key.

Verify fetches the key file the way a search engine does. Skipping it is how runs come back 403, or worse, get accepted and quietly ignored.

Configured projects

{% for row in rows %} {% set s = summaries.get(row['name']) %} {% else %} {% endfor %}
NameHostKeyEndpointSitemapURLsFailedActions
{{ row['name'] }} {{ row['host'] }} {{ row['key'][:6] }}…{{ row['key'][-4:] }} {{ row['default_endpoint'] }} {{ 'yes' if row['sitemap_url'] else '—' }} {{ s['total_urls'] if s else 0 }} {{ (s['failed_urls'] or 0) if s else 0 }}
No projects configured yet.

Projects listed in a legacy .env file are imported on startup if a project of that name does not exist yet. Edits made here are never overwritten.

{% endblock %}