Catalog / electionpromisetracker.org
65

SEO audit for electionpromisetracker.org

Promise Tracker

other

Health 65/100 (fair) · 50 pages crawled · generated 2026-08-26

Download Markdown report (feed to ChatGPT / Claude / Cursor)
Screenshot of electionpromisetracker.org
50
pages crawled
50
indexable pages
0
errors
286
warnings
492
notices
0
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
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
Findings

Warnings (7 rules)

warning Control has no accessible name

Rule agent.control_no_name · Agent Readiness · 50 occurrence(s)

warning Thin content (low word count)

Rule content.thin · Content · 34 occurrence(s)

warning Duplicate <title> across pages

Rule duplicate.title · Duplicate · 50 occurrence(s)

warning Render-blocking script in <head> (no defer/async)

Rule perf.render_blocking · Performance · 2 occurrence(s)

Notices (14 rules)

notice Heading levels skip a level

Rule agent.heading_skip · Agent Readiness · 2 occurrence(s)

notice No llms.txt for AI agents

Rule agent.llms_txt_missing · Agent Readiness · 1 occurrence(s)

notice Page served uncached (no-store/private or CDN bypass)

Rule cache.not_cacheable · Cache · 50 occurrence(s)

notice Missing <!DOCTYPE html> (quirks-mode rendering risk)

Rule encoding.doctype_missing · Content · 2 occurrence(s)

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)

notice Missing Open Graph tags

Rule og.missing · Social · 50 occurrence(s)

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)

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 Missing recommended security headers

Rule security.missing_headers · Security · 50 occurrence(s)

Pages (showing 50 of 50)
URLStatusIndexableWordsIn-links
https://www.electionpromisetracker.org/
Promise Tracker
200 yes 11784 50
https://www.electionpromisetracker.org/about
Promise Tracker
200 yes 1286 50
https://www.electionpromisetracker.org/commitments
Promise Tracker
200 yes 503 50
https://www.electionpromisetracker.org/local-election-commitments
Promise Tracker
200 yes 37 50
https://www.electionpromisetracker.org/national-election-commitments
Promise Tracker
200 yes 4591 50
https://www.electionpromisetracker.org/commitments/410
Promise Tracker
200 yes 52 3
https://www.electionpromisetracker.org/commitments/411
Promise Tracker
200 yes 54 3
https://www.electionpromisetracker.org/commitments/412
Promise Tracker
200 yes 64 3
https://www.electionpromisetracker.org/commitments/413
Promise Tracker
200 yes 47 2
https://www.electionpromisetracker.org/commitments/414
Promise Tracker
200 yes 90 2
https://www.electionpromisetracker.org/commitments/415
Promise Tracker
200 yes 67 2
https://www.electionpromisetracker.org/commitments?page=2
Promise Tracker
200 yes 501 1
https://www.electionpromisetracker.org/commitments/392
Promise Tracker
200 yes 48 3
https://www.electionpromisetracker.org/commitments/29
Promise Tracker
200 yes 89 2
https://www.electionpromisetracker.org/commitments/300
Promise Tracker
200 yes 124 2
https://www.electionpromisetracker.org/commitments/301
Promise Tracker
200 yes 86 2
https://www.electionpromisetracker.org/commitments/160
Promise Tracker
200 yes 46 2
https://www.electionpromisetracker.org/commitments/161
Promise Tracker
200 yes 49 2
https://www.electionpromisetracker.org/commitments/162
Promise Tracker
200 yes 55 2
https://www.electionpromisetracker.org/commitments/192
Promise Tracker
200 yes 61 2
https://www.electionpromisetracker.org/commitments/193
Promise Tracker
200 yes 92 2
https://www.electionpromisetracker.org/commitments/195
Promise Tracker
200 yes 59 2
https://www.electionpromisetracker.org/commitments/218
Promise Tracker
200 yes 97 2
https://www.electionpromisetracker.org/commitments/219
Promise Tracker
200 yes 56 2
https://www.electionpromisetracker.org/commitments/220
Promise Tracker
200 yes 48 2
https://www.electionpromisetracker.org/commitments/256
Promise Tracker
200 yes 68 2
https://www.electionpromisetracker.org/commitments/258
Promise Tracker
200 yes 68 2
https://www.electionpromisetracker.org/commitments/259
Promise Tracker
200 yes 93 2
https://www.electionpromisetracker.org/commitments/313
Promise Tracker
200 yes 50 2
https://www.electionpromisetracker.org/commitments/314
Promise Tracker
200 yes 84 2
https://www.electionpromisetracker.org/commitments/319
Promise Tracker
200 yes 71 2
https://www.electionpromisetracker.org/commitments/367
Promise Tracker
200 yes 84 2
https://www.electionpromisetracker.org/commitments/368
Promise Tracker
200 yes 96 2
https://www.electionpromisetracker.org/commitments/369
Promise Tracker
200 yes 100 2
https://www.electionpromisetracker.org/commitments/60
Promise Tracker
200 yes 66 2
https://www.electionpromisetracker.org/commitments/61
Promise Tracker
200 yes 120 2
https://www.electionpromisetracker.org/commitments/63
Promise Tracker
200 yes 49 2
https://www.electionpromisetracker.org/commitments/378
Promise Tracker
200 yes 111 1
https://www.electionpromisetracker.org/commitments/379
Promise Tracker
200 yes 74 1
https://www.electionpromisetracker.org/commitments?category=27
Promise Tracker
200 yes 240 1
https://www.electionpromisetracker.org/commitments?category=32
Promise Tracker
200 yes 492 1
https://www.electionpromisetracker.org/commitments?category=44
Promise Tracker
200 yes 291 1
https://www.electionpromisetracker.org/commitments?category=45
Promise Tracker
200 yes 329 1
https://www.electionpromisetracker.org/commitments?category=49
Promise Tracker
200 yes 286 1
https://www.electionpromisetracker.org/commitments?category=50
Promise Tracker
200 yes 468 1
https://www.electionpromisetracker.org/commitments?category=58
Promise Tracker
200 yes 547 1
https://www.electionpromisetracker.org/commitments?category=59
Promise Tracker
200 yes 307 1
https://www.electionpromisetracker.org/commitments?category=67
Promise Tracker
200 yes 328 1
https://www.electionpromisetracker.org/commitments?category=74
Promise Tracker
200 yes 253 1
https://www.electionpromisetracker.org/commitments?category=85
Promise Tracker
200 yes 242 1

Audit your own site — free

157 checks, internal PageRank, render-diff. No signup, results in ~30s.

Scan your site →