{% if data.get('site_analysis', {}).get('version') %}

Site-wide analysis

{% set site = data.site_analysis %}

{{ site.scope }}

{{ site.coverage.pages_with_facts }} of {{ site.coverage.inventory_pages }} observed URLs have page facts. {{ site.coverage.note }}

{{ site.links.edge_count }} distinct internal link pairs; {{ site.links.unfetched_targets|length }} targets not in the fetched inventory; {{ site.links.components|length }} connected groups in the observed graph.

{{ site.links.depth_method }}

{% if site.links.roots %}

Entry pages: {{ site.links.roots|join(', ') }} ({{ site.links.root_source }})

{% else %}

No entry page is known; reachability and depth are unavailable.

{% endif %}
Canonical and internal-link observations for every URL
{% for page in site.pages %} {% for key in ['canonical_hops', 'incoming_links', 'outgoing_links', 'link_depth'] %} {% endfor %} {% endfor %}
URLCanonical statusCanonical target(s)Terminal HopsIncomingOutgoingLink depth
{% if page.url|safe_url %}{{ page.url }}{% else %}{{ page.url }}{% endif %} {{ page.canonical_status }}{{ page.canonical_targets|join(', ') }} {{ page.canonical_terminal or 'Unverified' }}{{ page[key] if page[key] is not none else 'Unverified' }}
{% if site.canonicals.cycles %}
Canonical cycles {% for cycle in site.canonicals.cycles %}

Cycle {{ cycle.id }}: {{ cycle.urls|join(' → ') }}

{% endfor %}
{% endif %}
{% endif %}