SEO audit for electionpromisetracker.org
Promise Tracker
Health 65/100 (fair) · 50 pages crawled · generated 2026-08-26
Download Markdown report (feed to ChatGPT / Claude / Cursor)
| Category | Score | Errors | Warnings | Notices |
|---|---|---|---|---|
| Agent Readiness | 70 | 0 | 50 | 3 |
| Canonical | 70 | 0 | 50 | 0 |
| Duplicate | 70 | 0 | 50 | 0 |
| Headings | 70 | 0 | 50 | 0 |
| Meta Description | 70 | 0 | 50 | 0 |
| Content | 80 | 0 | 34 | 2 |
| Performance | 99 | 0 | 2 | 187 |
| Cache | 100 | 0 | 0 | 50 |
| Images | 100 | 0 | 0 | 50 |
| Security | 100 | 0 | 0 | 50 |
| Social | 100 | 0 | 0 | 100 |
| Structured Data | 100 | 0 | 0 | 50 |
Warnings (7 rules)
warning Control has no accessible name
Rule agent.control_no_name · Agent Readiness · 50 occurrence(s)
- https://www.electionpromisetracker.org/ — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/about — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/218 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/219 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/220 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/256 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/258 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/259 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/313 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/314 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/319 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/410 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/411 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/412 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/413 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/414 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments/415 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments?category=49 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments?category=50 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments?category=59 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments?category=67 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/commitments?page=2 — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/local-election-commitments — 3 button/link(s) with no text or aria-label — an agent can't target them
- https://www.electionpromisetracker.org/national-election-commitments — 5 button/link(s) with no text or aria-label — an agent can't target them
warning Missing canonical tag
Rule canonical.missing · Canonical · 50 occurrence(s)
- https://www.electionpromisetracker.org/
- https://www.electionpromisetracker.org/about
- https://www.electionpromisetracker.org/commitments
- https://www.electionpromisetracker.org/commitments/218
- https://www.electionpromisetracker.org/commitments/219
- https://www.electionpromisetracker.org/commitments/220
- https://www.electionpromisetracker.org/commitments/256
- https://www.electionpromisetracker.org/commitments/258
- https://www.electionpromisetracker.org/commitments/259
- https://www.electionpromisetracker.org/commitments/313
- https://www.electionpromisetracker.org/commitments/314
- https://www.electionpromisetracker.org/commitments/319
- https://www.electionpromisetracker.org/commitments/410
- https://www.electionpromisetracker.org/commitments/411
- https://www.electionpromisetracker.org/commitments/412
- https://www.electionpromisetracker.org/commitments/413
- https://www.electionpromisetracker.org/commitments/414
- https://www.electionpromisetracker.org/commitments/415
- https://www.electionpromisetracker.org/commitments?category=49
- https://www.electionpromisetracker.org/commitments?category=50
- https://www.electionpromisetracker.org/commitments?category=59
- https://www.electionpromisetracker.org/commitments?category=67
- https://www.electionpromisetracker.org/commitments?page=2
- https://www.electionpromisetracker.org/local-election-commitments
- https://www.electionpromisetracker.org/national-election-commitments
warning Thin content (low word count)
Rule content.thin · Content · 34 occurrence(s)
- https://www.electionpromisetracker.org/commitments/162 — 55 words
- https://www.electionpromisetracker.org/commitments/218 — 97 words
- https://www.electionpromisetracker.org/commitments/219 — 56 words
- https://www.electionpromisetracker.org/commitments/220 — 48 words
- https://www.electionpromisetracker.org/commitments/256 — 68 words
- https://www.electionpromisetracker.org/commitments/258 — 68 words
- https://www.electionpromisetracker.org/commitments/259 — 93 words
- https://www.electionpromisetracker.org/commitments/300 — 124 words
- https://www.electionpromisetracker.org/commitments/301 — 86 words
- https://www.electionpromisetracker.org/commitments/313 — 50 words
- https://www.electionpromisetracker.org/commitments/314 — 84 words
- https://www.electionpromisetracker.org/commitments/319 — 71 words
- https://www.electionpromisetracker.org/commitments/367 — 84 words
- https://www.electionpromisetracker.org/commitments/368 — 96 words
- https://www.electionpromisetracker.org/commitments/369 — 100 words
- https://www.electionpromisetracker.org/commitments/410 — 52 words
- https://www.electionpromisetracker.org/commitments/411 — 54 words
- https://www.electionpromisetracker.org/commitments/412 — 64 words
- https://www.electionpromisetracker.org/commitments/413 — 47 words
- https://www.electionpromisetracker.org/commitments/414 — 90 words
- https://www.electionpromisetracker.org/commitments/415 — 67 words
- https://www.electionpromisetracker.org/commitments/60 — 66 words
- https://www.electionpromisetracker.org/commitments/61 — 120 words
- https://www.electionpromisetracker.org/commitments/63 — 49 words
- https://www.electionpromisetracker.org/local-election-commitments — 37 words
warning Duplicate <title> across pages
Rule duplicate.title · Duplicate · 50 occurrence(s)
- https://www.electionpromisetracker.org/ — title shared by 50 pages: https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments, https://www.electionpromisetracker.org/local-election-commitments
- https://www.electionpromisetracker.org/about — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/national-election-commitments, https://www.electionpromisetracker.org/local-election-commitments
- https://www.electionpromisetracker.org/commitments — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/218 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/219 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/220 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/256 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/258 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/259 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/313 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/314 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/319 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/410 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/411 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/412 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/413 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/414 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments/415 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments?category=49 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments?category=50 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments?category=59 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments?category=67 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/commitments?page=2 — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/local-election-commitments — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/national-election-commitments
- https://www.electionpromisetracker.org/national-election-commitments — title shared by 50 pages: https://www.electionpromisetracker.org/, https://www.electionpromisetracker.org/about, https://www.electionpromisetracker.org/local-election-commitments
warning Missing <h1>
Rule h1.missing · Headings · 50 occurrence(s)
- https://www.electionpromisetracker.org/
- https://www.electionpromisetracker.org/about
- https://www.electionpromisetracker.org/commitments
- https://www.electionpromisetracker.org/commitments/218
- https://www.electionpromisetracker.org/commitments/219
- https://www.electionpromisetracker.org/commitments/220
- https://www.electionpromisetracker.org/commitments/256
- https://www.electionpromisetracker.org/commitments/258
- https://www.electionpromisetracker.org/commitments/259
- https://www.electionpromisetracker.org/commitments/313
- https://www.electionpromisetracker.org/commitments/314
- https://www.electionpromisetracker.org/commitments/319
- https://www.electionpromisetracker.org/commitments/410
- https://www.electionpromisetracker.org/commitments/411
- https://www.electionpromisetracker.org/commitments/412
- https://www.electionpromisetracker.org/commitments/413
- https://www.electionpromisetracker.org/commitments/414
- https://www.electionpromisetracker.org/commitments/415
- https://www.electionpromisetracker.org/commitments?category=49
- https://www.electionpromisetracker.org/commitments?category=50
- https://www.electionpromisetracker.org/commitments?category=59
- https://www.electionpromisetracker.org/commitments?category=67
- https://www.electionpromisetracker.org/commitments?page=2
- https://www.electionpromisetracker.org/local-election-commitments
- https://www.electionpromisetracker.org/national-election-commitments
warning Missing meta description
Rule meta_desc.missing · Meta Description · 50 occurrence(s)
- https://www.electionpromisetracker.org/
- https://www.electionpromisetracker.org/about
- https://www.electionpromisetracker.org/commitments
- https://www.electionpromisetracker.org/commitments/218
- https://www.electionpromisetracker.org/commitments/219
- https://www.electionpromisetracker.org/commitments/220
- https://www.electionpromisetracker.org/commitments/256
- https://www.electionpromisetracker.org/commitments/258
- https://www.electionpromisetracker.org/commitments/259
- https://www.electionpromisetracker.org/commitments/313
- https://www.electionpromisetracker.org/commitments/314
- https://www.electionpromisetracker.org/commitments/319
- https://www.electionpromisetracker.org/commitments/410
- https://www.electionpromisetracker.org/commitments/411
- https://www.electionpromisetracker.org/commitments/412
- https://www.electionpromisetracker.org/commitments/413
- https://www.electionpromisetracker.org/commitments/414
- https://www.electionpromisetracker.org/commitments/415
- https://www.electionpromisetracker.org/commitments?category=49
- https://www.electionpromisetracker.org/commitments?category=50
- https://www.electionpromisetracker.org/commitments?category=59
- https://www.electionpromisetracker.org/commitments?category=67
- https://www.electionpromisetracker.org/commitments?page=2
- https://www.electionpromisetracker.org/local-election-commitments
- https://www.electionpromisetracker.org/national-election-commitments
warning Render-blocking script in <head> (no defer/async)
Rule perf.render_blocking · Performance · 2 occurrence(s)
- https://www.electionpromisetracker.org/local-election-commitments — 2 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.electionpromisetracker.org/national-election-commitments — 2 render-blocking <script> in <head> (add defer/async or use type=module)
Notices (14 rules)
notice Heading levels skip a level
Rule agent.heading_skip · Agent Readiness · 2 occurrence(s)
- https://www.electionpromisetracker.org/about — h4 follows h2 — skips h3
- https://www.electionpromisetracker.org/national-election-commitments — h6 follows h2 — skips h3
notice No llms.txt for AI agents
Rule agent.llms_txt_missing · Agent Readiness · 1 occurrence(s)
- https://www.electionpromisetracker.org/ — no llms.txt found at the site root — add one so AI agents get a curated site summary
notice Page served uncached (no-store/private or CDN bypass)
Rule cache.not_cacheable · Cache · 50 occurrence(s)
- https://www.electionpromisetracker.org/ — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/about — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/218 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/219 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/220 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/256 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/258 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/259 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/313 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/314 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/319 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/410 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/411 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/412 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/413 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/414 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments/415 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments?category=49 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments?category=50 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments?category=59 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments?category=67 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/commitments?page=2 — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/local-election-commitments — Cache-Control: no-cache, private
- https://www.electionpromisetracker.org/national-election-commitments — Cache-Control: no-cache, private
notice Missing <!DOCTYPE html> (quirks-mode rendering risk)
Rule encoding.doctype_missing · Content · 2 occurrence(s)
- https://www.electionpromisetracker.org/local-election-commitments — no <!DOCTYPE html> in the response — add it to avoid quirks-mode rendering differences
- https://www.electionpromisetracker.org/national-election-commitments — no <!DOCTYPE html> in the response — add it to avoid quirks-mode rendering differences
notice Likely hero image lacks fetchpriority=high
Rule images.hero_no_fetchpriority · Performance · 35 occurrence(s)
- https://www.electionpromisetracker.org/ — the likely hero/LCP image (hero-banner-bn.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/about — the likely hero/LCP image (about-banner.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/218 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/219 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/220 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/256 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/258 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/259 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/300 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/301 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/313 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/314 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/319 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/367 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/368 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/369 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/410 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/411 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/412 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/413 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/414 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/415 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/60 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/61 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://www.electionpromisetracker.org/commitments/63 — the likely hero/LCP image (arrow-up.svg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
notice Images without width/height (layout shift / CLS)
Rule images.missing_dimensions · Images · 50 occurrence(s)
- https://www.electionpromisetracker.org/ — 3 of 401 images without width/height
- https://www.electionpromisetracker.org/about — 25 of 25 images without width/height
- https://www.electionpromisetracker.org/commitments — 2 of 2 images without width/height
- https://www.electionpromisetracker.org/commitments/218 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/219 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/220 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/256 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/258 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/259 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/313 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/314 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/319 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/410 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/411 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/412 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/413 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/414 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments/415 — 2 of 3 images without width/height
- https://www.electionpromisetracker.org/commitments?category=49 — 2 of 2 images without width/height
- https://www.electionpromisetracker.org/commitments?category=50 — 2 of 2 images without width/height
- https://www.electionpromisetracker.org/commitments?category=59 — 2 of 2 images without width/height
- https://www.electionpromisetracker.org/commitments?category=67 — 2 of 2 images without width/height
- https://www.electionpromisetracker.org/commitments?page=2 — 2 of 2 images without width/height
- https://www.electionpromisetracker.org/local-election-commitments — 2 of 2 images without width/height
- https://www.electionpromisetracker.org/national-election-commitments — 2 of 2 images without width/height
notice Missing Open Graph tags
Rule og.missing · Social · 50 occurrence(s)
- https://www.electionpromisetracker.org/ — og:title, og:description, og:image
- https://www.electionpromisetracker.org/about — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/218 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/219 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/220 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/256 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/258 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/259 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/313 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/314 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/319 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/410 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/411 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/412 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/413 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/414 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments/415 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments?category=49 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments?category=50 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments?category=59 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments?category=67 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/commitments?page=2 — og:title, og:description, og:image
- https://www.electionpromisetracker.org/local-election-commitments — og:title, og:description, og:image
- https://www.electionpromisetracker.org/national-election-commitments — og:title, og:description, og:image
notice Large DOM (over 1500 elements) slows rendering & interaction
Rule perf.dom_size_large · Performance · 2 occurrence(s)
- https://www.electionpromisetracker.org/ — the page has 3691 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.
- https://www.electionpromisetracker.org/national-election-commitments — the page has 3009 DOM elements (recommended maximum is around 1500) — a large DOM increases style-recalculation, layout and paint cost, hurting LCP and INP. Flatten deep nesting, paginate long lists/tables, and lazy-render off-screen elements.
notice Legacy image format (jpg/png/gif) with no next-gen fallback
Rule perf.images_legacy_format · Performance · 50 occurrence(s)
- https://www.electionpromisetracker.org/ — 400 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/about — 24 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/218 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/219 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/220 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/256 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/258 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/259 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/313 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/314 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/319 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/410 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/411 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/412 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/413 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/414 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments/415 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments?category=49 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments?category=50 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments?category=59 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments?category=67 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/commitments?page=2 — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/local-election-commitments — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
- https://www.electionpromisetracker.org/national-election-commitments — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
notice No ETag header (no conditional GET for unchanged pages)
Rule perf.no_etag · Performance · 50 occurrence(s)
- https://www.electionpromisetracker.org/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/about — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/218 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/219 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/220 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/256 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/258 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/259 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/313 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/314 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/319 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/410 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/411 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/412 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/413 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/414 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments/415 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments?category=49 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments?category=50 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments?category=59 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments?category=67 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/commitments?page=2 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/local-election-commitments — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
- https://www.electionpromisetracker.org/national-election-commitments — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
notice No Last-Modified header (no conditional GET for unchanged pages)
Rule perf.no_last_modified · Performance · 50 occurrence(s)
- https://www.electionpromisetracker.org/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/about — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/218 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/219 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/220 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/256 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/258 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/259 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/313 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/314 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/319 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/410 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/411 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/412 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/413 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/414 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments/415 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments?category=49 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments?category=50 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments?category=59 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments?category=67 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/commitments?page=2 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/local-election-commitments — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
- https://www.electionpromisetracker.org/national-election-commitments — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
notice No structured data detected
Rule schema.none · Structured Data · 50 occurrence(s)
- https://www.electionpromisetracker.org/
- https://www.electionpromisetracker.org/about
- https://www.electionpromisetracker.org/commitments
- https://www.electionpromisetracker.org/commitments/218
- https://www.electionpromisetracker.org/commitments/219
- https://www.electionpromisetracker.org/commitments/220
- https://www.electionpromisetracker.org/commitments/256
- https://www.electionpromisetracker.org/commitments/258
- https://www.electionpromisetracker.org/commitments/259
- https://www.electionpromisetracker.org/commitments/313
- https://www.electionpromisetracker.org/commitments/314
- https://www.electionpromisetracker.org/commitments/319
- https://www.electionpromisetracker.org/commitments/410
- https://www.electionpromisetracker.org/commitments/411
- https://www.electionpromisetracker.org/commitments/412
- https://www.electionpromisetracker.org/commitments/413
- https://www.electionpromisetracker.org/commitments/414
- https://www.electionpromisetracker.org/commitments/415
- https://www.electionpromisetracker.org/commitments?category=49
- https://www.electionpromisetracker.org/commitments?category=50
- https://www.electionpromisetracker.org/commitments?category=59
- https://www.electionpromisetracker.org/commitments?category=67
- https://www.electionpromisetracker.org/commitments?page=2
- https://www.electionpromisetracker.org/local-election-commitments
- https://www.electionpromisetracker.org/national-election-commitments
notice Missing recommended security headers
Rule security.missing_headers · Security · 50 occurrence(s)
- https://www.electionpromisetracker.org/ — HSTS, CSP
- https://www.electionpromisetracker.org/about — HSTS, CSP
- https://www.electionpromisetracker.org/commitments — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/218 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/219 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/220 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/256 — CSP, HSTS
- https://www.electionpromisetracker.org/commitments/258 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/259 — CSP, HSTS
- https://www.electionpromisetracker.org/commitments/313 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/314 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/319 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/410 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/411 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/412 — CSP, HSTS
- https://www.electionpromisetracker.org/commitments/413 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/414 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments/415 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments?category=49 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments?category=50 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments?category=59 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments?category=67 — HSTS, CSP
- https://www.electionpromisetracker.org/commitments?page=2 — HSTS, CSP
- https://www.electionpromisetracker.org/local-election-commitments — HSTS, CSP
- https://www.electionpromisetracker.org/national-election-commitments — HSTS, CSP
notice Missing Twitter Card tag
Rule twitter.missing · Social · 50 occurrence(s)
- https://www.electionpromisetracker.org/
- https://www.electionpromisetracker.org/about
- https://www.electionpromisetracker.org/commitments
- https://www.electionpromisetracker.org/commitments/218
- https://www.electionpromisetracker.org/commitments/219
- https://www.electionpromisetracker.org/commitments/220
- https://www.electionpromisetracker.org/commitments/256
- https://www.electionpromisetracker.org/commitments/258
- https://www.electionpromisetracker.org/commitments/259
- https://www.electionpromisetracker.org/commitments/313
- https://www.electionpromisetracker.org/commitments/314
- https://www.electionpromisetracker.org/commitments/319
- https://www.electionpromisetracker.org/commitments/410
- https://www.electionpromisetracker.org/commitments/411
- https://www.electionpromisetracker.org/commitments/412
- https://www.electionpromisetracker.org/commitments/413
- https://www.electionpromisetracker.org/commitments/414
- https://www.electionpromisetracker.org/commitments/415
- https://www.electionpromisetracker.org/commitments?category=49
- https://www.electionpromisetracker.org/commitments?category=50
- https://www.electionpromisetracker.org/commitments?category=59
- https://www.electionpromisetracker.org/commitments?category=67
- https://www.electionpromisetracker.org/commitments?page=2
- https://www.electionpromisetracker.org/local-election-commitments
- https://www.electionpromisetracker.org/national-election-commitments
Audit your own site — free
157 checks, internal PageRank, render-diff. No signup, results in ~30s.