{% extends "base.html" %} {% set active_page = 'dashboard' %} {% block title %}Submit URLs — IndexNow Tool{% endblock %} {% block content %}

Submit URLs

Pick a project, choose where the URLs come from, and watch the run live.

{% if not projects %}

No projects yet

Add a project with its host and IndexNow key before submitting anything.

{% else %}

New run

Leave on global unless you specifically want Bing only. Both feed the same network.

Leave empty to use the sitemap saved on the project. .xml.gz works too.

Off by default. Known-good URLs are skipped so you do not spam the API with duplicates.

Projects

{% for name, cfg in projects.items() %} {% set s = summaries | selectattr('project_name', 'equalto', name) | first %} {% endfor %}
ProjectTotalSentFailedPending
{{ name }}
{{ cfg.host }}
{{ s.total_urls if s else 0 }} {{ (s.submitted_urls or 0) if s else 0 }} {{ (s.failed_urls or 0) if s else 0 }} {{ (s.pending_urls or 0) if s else 0 }}

Failed URL actions

Retry failed

Scope

Ids come from the Failed list. An empty box with "Only the ids below" does nothing.


Mark failed as successful

Use when you confirmed indexing happened another way. This only changes local bookkeeping.

Scope
{% endif %}

Recent runs

{% for run in runs %} {% else %} {% endfor %}
RunProjectEndpointSource SentAcceptedFailedSkippedInvalid ResultStarted
#{{ run.id }} {{ run.project_name }} {{ run.endpoint }} {{ run.source_type }} {{ run.submitted_count }} {{ run.accepted_count }} {{ run.failed_count }} {{ run.skipped_existing_count }} {{ run.invalid_count }} {% if run.status == 'running' %}Running {% elif run.status == 'failed' %}Run error {% elif run.status == 'interrupted' %}Interrupted {% elif run.failed_count > 0 and run.accepted_count > 0 %}Partly accepted {% elif run.failed_count > 0 %}Rejected {% elif run.accepted_count > 0 %}Accepted {% elif run.skipped_existing_count > 0 %}All skipped {% else %}Nothing sent{% endif %} {{ run.created_at }}
No runs yet.
{% endblock %} {% block scripts %} {% endblock %}