Monitors crawl your sitemap on a schedule (or on demand), run 42 SEO health rules plus 12 AEO readiness checks against every URL, and roll results up into 0–100 SEO health and AEO readiness scores. When new critical or warning issues land on a scan, VectraSEO emails your configured recipients.
broken_status
CRITICAL
Flags any URL returning a 4xx or 5xx HTTP status code.
redirect_chain
WARNING
Flags URLs that redirect more than twice before hitting a final 200.
spa_placeholder
CRITICAL
Flags SPA routes that return placeholder HTML without the real content — bots see an empty page.
duplicate_initial_html
WARNING
Flags groups of URLs serving byte-identical initial HTML.
missing_meta
WARNING
Flags pages missing a title, meta description, or canonical link.
metadata_quality
WARNING
Flags duplicate, too-short, too-long, or weak title/description/H1 combinations.
canonical_quality
WARNING
Flags canonicals that are inconsistent, non-HTTPS, off-domain, redirected, or noindex.
og_twitter_tags
WARNING
Flags pages missing Open Graph or Twitter Card meta tags used for link previews.
heading_structure
WARNING
Flags pages with zero or more than one <h1> heading.
viewport_meta
WARNING
Flags pages missing <meta name="viewport"> for device-width mobile rendering.
image_alt
INFO
Flags <img> elements shipped without an alt attribute.
image_seo
INFO
Flags generic image filenames, missing dimensions, lazy LCP-image risk, and suspicious alt text.
noindex_in_sitemap
WARNING
Flags pages listed in the sitemap but marked noindex.
x_robots_tag
CRITICAL
Flags HTTP X-Robots-Tag headers that noindex or restrict search appearance.
robots_txt
CRITICAL
Flags robots.txt rules that block sitemap URLs, plus missing sitemap discovery hints.
sitemap_hygiene
WARNING
Flags sitemap entries that are non-HTTPS, redirected, parameterized, fragmented, or not final.
internal_links
WARNING
Flags internal links to broken, redirected, noindex, or non-final URLs in the scanned set.
hreflang
WARNING
Flags invalid, missing-self, unsuccessful, or non-reciprocal hreflang annotations.
mixed_content
WARNING
Flags HTTPS pages that load scripts, images, or stylesheets over HTTP.
slow_response
WARNING
Flags slow origin response times, with critical severity above the 3-second threshold.
performance_static
INFO
Flags static Core Web Vitals risk signals such as page weight, script count, and render blocking.
thin_content
INFO
Flags indexable pages with very little visible text content.
structured_data
WARNING
Flags missing, broken, or incomplete schema.org JSON-LD.
html_lang
WARNING
Flags pages missing a valid html lang attribute.
meta_refresh
WARNING
Flags meta refresh redirects that can confuse crawlers and users.
meta_viewport_scaling
WARNING
Flags viewport settings that disable user zoom or scaling.
link_text_quality
WARNING
Flags vague link labels such as "click here" that hide destination intent.
crawlable_anchors
WARNING
Flags links that are not crawlable anchors with usable href values.
doctype
INFO
Flags pages missing an HTML doctype declaration.
charset_declaration
INFO
Flags pages missing an early character-set declaration.
duplicate_ids
INFO
Flags duplicate element IDs that break labels, anchors, and assistive technology.
frame_title
INFO
Flags iframes without descriptive title attributes.
form_labels
INFO
Flags form controls without accessible labels.
button_link_name
INFO
Flags buttons and links without accessible names.
image_input_alt
INFO
Flags image inputs without alt text.
heading_order
INFO
Flags heading-level jumps that make document structure harder to parse.
tabindex_positive
INFO
Flags positive tabindex values that create unexpected keyboard order.
landmark_main
INFO
Flags pages missing a main landmark.
broken_links
CRITICAL
Probes page links and flags genuinely broken internal and external destinations.
merchant_listing
WARNING
Flags product pages missing merchant-listing structured-data fields.
soft_404
WARNING
Flags 200-OK pages that look like not-found or unavailable content.
duplicate_metadata
WARNING
Flags duplicate titles and descriptions across scanned pages.
aeo_snippet_eligibility
WARNING
Checks whether the page has extractable answer-like copy for AI summaries.
aeo_answer_structure
WARNING
Checks for concise answer blocks near headings and key questions.
aeo_entity_clarity
WARNING
Checks whether brand, organization, and topic entities are named clearly.
aeo_question_coverage
INFO
Checks whether likely user questions are answered directly on the page.
aeo_supporting_evidence
WARNING
Checks for citations, sources, or evidence that support factual claims.
aeo_freshness_signals
INFO
Checks for visible update dates and machine-readable freshness signals.
aeo_author_attribution
INFO
Checks for author, publisher, or organization attribution.
aeo_canonical_consistency
WARNING
Checks whether canonical and citation-target signals agree.
aeo_content_demarcation
INFO
Checks whether main content is clearly separated from navigation and boilerplate.
aeo_speakable_schema
INFO
Checks for optional speakable or answer-friendly structured data.
aeo_llms_txt
INFO
Checks for llms.txt discovery and basic readability.
aeo_crawler_access
WARNING
Checks whether robots.txt blocks common AI answer-engine crawlers.
The score starts at 100 and decays as issues pile up. Weights are tuned so a handful of criticals tank the score faster than a long tail of info noise.
issue.json
{
"id": "iss_01H...",
"monitor_id": "mon_01H...",
"scan_id": "scan_01H...",
"rule": "broken_status",
"severity": "critical",
"url": "https://yoursite.com/products/legacy",
"message": "Returned 404 Not Found",
"recommendation": "Either restore the page or add a 301 redirect to the replacement URL.",
"evidence": {
"status_code": 404,
"response_time_ms": 182,
"final_url": "https://yoursite.com/products/legacy"
},
"first_seen_at": "2026-04-12T09:14:22Z",
"last_seen_at": "2026-04-13T09:14:22Z"
}