Audit complete · 19h ago

pseolint.dev

↗ pseolint.dev
Verdict
Ready

1 should-fix, 124 informational

  • Site typeprogrammatic-directory
  • Confidence70%
  • Discovered84 URLs
WARNING · pseolint.dev/leaderboardINFO · pseolint.dev/pricingINFO · pseolint.dev/limitsINFO · pseolint.dev/abuseINFO · pseolint.dev/toolsINFO · pseolint.dev/rulesINFO · pseolint.dev/symptomsINFO · pseolint.dev/methodologyINFO · pseolint.dev/tools/spambrain-checkerINFO · pseolint.dev/tools/thin-content-scannerINFO · pseolint.dev/tools/doorway-page-detectorINFO · pseolint.dev/rules/doorway-patternINFO · pseolint.dev/rules/thin-contentINFO · pseolint.dev/rules/boilerplate-ratioINFO · pseolint.dev/rules/near-duplicateINFO · pseolint.dev/rules/host-section-divergenceINFO · pseolint.dev/rules/template-diversityINFO · pseolint.dev/rules/entity-swapINFO · pseolint.dev/rules/publication-velocityINFO · pseolint.dev/rules/unique-valueINFO · pseolint.dev/rules/template-coverageINFO · pseolint.dev/rules/missing-authorINFO · pseolint.dev/rules/meta-uniquenessINFO · pseolint.dev/rules/eeat-signalsINFO · pseolint.dev/rules/title-uniquenessINFO · pseolint.dev/rules/heading-structureINFO · pseolint.dev/rules/image-alt-textINFO · pseolint.dev/rules/orphan-pagesINFO · pseolint.dev/rules/dead-endsINFO · pseolint.dev/rules/link-depthINFO · pseolint.dev/rules/cluster-connectivityINFO · pseolint.dev/rules/url-patternINFO · pseolint.dev/rules/freshness-signalsINFO · pseolint.dev/rules/llms-txtINFO · pseolint.dev/rules/crawler-accessINFO · pseolint.dev/rules/faq-coverageINFO · pseolint.dev/rules/summary-baitINFO · pseolint.dev/rules/translation-no-opINFO · pseolint.dev/rules/regurgitated-contentINFO · pseolint.dev/rules/common-phrase-reuseINFO · pseolint.dev/rules/wikipedia-paraphraseINFO · pseolint.dev/rules/value-addINFO · pseolint.dev/rules/crawlable-anchorsINFO · pseolint.dev/rules/meta-description-presenceINFO · pseolint.dev/rules/generic-anchor-textINFO · pseolint.dev/rules/hreflang-validityINFO · pseolint.dev/rules/language-mismatchINFO · pseolint.dev/rules/sitemap-hygieneINFO · pseolint.dev/rules/meta-robots-conflictINFO · pseolint.dev/rules/snippet-suppressionINFO · pseolint.dev/rules/robots-txt-limitsINFO · pseolint.dev/rules/html-sizeINFO · pseolint.dev/rules/viewport-metaINFO · pseolint.dev/symptoms/how-to-audit-programmatic-seoINFO · pseolint.dev/symptoms/lost-rankings-after-google-updateINFO · pseolint.dev/symptoms/pages-deindexed-bulkINFO · pseolint.dev/symptoms/site-reputation-abuse-penaltyINFO · pseolint.dev/symptoms/traffic-drop-no-updateINFO · pseolint.dev/symptoms/thin-content-warning-search-consoleINFO · pseolint.dev/symptoms/manual-action-pure-spamINFO · pseolint.dev/symptoms/traffic-dropped-rankings-unchangedINFO · pseolint.dev/symptoms/new-pages-not-getting-indexedINFO · pseolint.dev/symptoms/scaled-content-abuse-penaltyINFO · pseolint.dev/symptoms/doorway-pages-penaltyINFO · pseolint.dev/symptoms/duplicate-google-chose-different-canonicalINFO · pseolint.dev/symptoms/expired-domain-abuseINFO · pseolint.dev/research/seo-folklore-vs-google-docsINFO · pseolint.dev/researchINFO · pseolint.dev/folkloreINFO · pseolint.dev/mcp-serverINFO · pseolint.dev/tools/nextjs-programmatic-seoINFO · pseolint.dev/tools/programmatic-seo-checklistINFO · pseolint.dev/rules/crawl-budget-optimizationINFO · pseolint.dev/rules/structured-data-at-scaleINFO · pseolint.dev/rules/programmatic-seo-ai-contentINFO · pseolint.dev/rules/webflow-vs-wordpress-pseoINFO · pseolint.dev/rules/internal-linking-silosINFO · pseolint.dev/research/ai-overviews-seo-impactClean page · no findingsClean page · no findings
Pages0with blockers1with should-fix77with info2clean80 scanned
Pages
80
scanned
Blockers
0
findings
Should fix
1
findings
Info
124
findings
Clean
2
pages

Heuristic score over 80 sampled pages, not Google's classifier. How to read this ↓

Category grades

Integrity
A
2 issues
Discoverability
A
4 issues
Citation
A
119 issues
Data
A
0 issues
Severity adjustments3 rules softened by the programmatic-directory profile

These rules still ran and emitted findings: the site-type profile lowered their severity so the score reflects how the signal applies to this kind of site, not a one-size-fits-all penalty.

aeo/answer-firstaeo/citable-factstech/og-completeness

Save this audit to your history, sign in.

Monitor this domain with Pro →
Audit another site
Origin readinessReady
68 live fetches
Median TTFB
785ms
p95 TTFB
1159ms
5xx rate
0%
Cache assisted
24%
Crawl coverageDiscovered 85 · audited 80 · skipped 0

Your origin handled the crawl cleanly. Under Googlebot / AI-crawler bursts you should be fine.

Templates · 5 detected

Findings · 125

sampled 80 pages
Top fixes by impactseverity × pages affected
  1. 1
    content/image-attributeswarningmoderate1 page

    https://pseolint.dev/leaderboard: 12 of 12 <img> tags declare neither width/height attributes nor inline sizing (e.g. https://tonfoyer.fr/opengraph-image?ef2f5ca556314a1d, https://pseolint.dev/opengraph-image?c80e752142bf0595, https://codexmachina.dev/previews/dashboard/dashboard.jpg). Without an aspect ratio the browser cannot reserve space, so content shifts as each image loads, which is what Cumulative Layout Shift measures.

Should fix· 1

Severity warning · should fix before scaling
Warningcontent/image-attributes1 finding

https://pseolint.dev/leaderboard: 12 of 12 <img> tags declare neither width/height attributes nor inline sizing (e.g. https://tonfoyer.fr/opengraph-image?ef2f5ca556314a1d, https://pseolint.dev/opengraph-image?c80e752142bf0595, https://codexmachina.dev/previews/dashboard/dashboard.jpg). Without an aspect ratio the browser cannot reserve space, so content shifts as each image loads, which is what Cumulative Layout Shift measures.

↗ pseolint.dev/leaderboard
Fix

Set the intrinsic width and height attributes on each <img> and let CSS scale it (width: 100%; height: auto). The browser derives aspect-ratio from the attribute pair and reserves the box before the bytes arrive. In a template, bind both from the same data source as the src.

moderate↗ Read more↗ Google docs1 page affected
Affected pages1

Informational· 124

Severity info · tracked for trend analysis
Infoaeo/faq-coverage66 findings

https://pseolint.dev/pricing reads as FAQ content (2 question-style headings (e.g. "What Pro unlocks", "Why we chose this pricing model")) but carries no machine-readable question/answer pairs.

↗ pseolint.dev/pricing
Fix

Fix this in the visible page, not in markup: give each question its own heading and put the complete answer in the first paragraph directly beneath it, so an answer engine can lift a whole question/answer pair without reassembling it. Do NOT add FAQPage JSON-LD expecting a rich result: Google removed the FAQ rich result from Search on 2026-05-07 and deleted its documentation on 2026-06-15, and QAPage is documented as being only for pages where users can submit answers, not for a site's own FAQ. If a non-Google consumer of your schema needs the markup, generate it from the same per-record data that renders the headings: don't ship identical questions with only the entity name swapped.

structural↗ Read more↗ Google docs66 pages affected
Affected pages66
Infolow confidenceaeo/citable-facts44 findings

https://pseolint.dev/abuse has 0 unique citable facts. AI Overviews cite specific numbers and named references.

↗ pseolint.dev/abuse
Fix

Replace vague language ("varies", "several weeks", "affordable", "many options") with specific values a reader or AI engine would cite: exact prices, percentages, dates, timeframes, version numbers, named products, standards, or regulations that apply to this page. For pSEO templates, bind these values from your data source so each page gets entity-specific numbers instead of repeating the same template wording. Target: 8+ unique facts per page.

structural↗ Read more↗ Google docs44 pages affected
Affected pages44
Infolow confidenceaeo/answer-first9 findings

https://pseolint.dev/symptoms/traffic-drop-no-update does not open with a direct, extractable answer: opener is 157 words (too long to extract) Marketing pages legitimately use narrative openers; this matters more for FAQ-style or directory pages.

↗ pseolint.dev/symptoms/traffic-drop-no-update
Fix

Restructure the template to open with entity-specific facts. Instead of boilerplate or a topic preamble, lead with a complete-answer sentence containing the key number, date, agency, or form name a reader (or AI Overview) would cite. Target: <100 words, at least one concrete number, at least one named entity.

moderate↗ Read more↗ Google docs9 pages affected
Affected pages9
Infocontent/image-attributes1 finding

https://pseolint.dev/leaderboard serves 12 images and not one uses srcset or <picture>, so phones download the desktop-sized file. Google recommends responsive images; this is guidance rather than a requirement, and no image dimension or byte limit is documented.

↗ pseolint.dev/leaderboard
Fix

Emit a srcset with a handful of widths plus a sizes attribute, or wrap the img in <picture> to offer a modern format with a fallback. Most image CDNs and framework Image components generate both from one source URL.

moderate↗ Read more↗ Google docs1 page affected
Affected pages1

Is this your site?

Claim it to manage the listing, get a verified badge, and a followed backlink.

pseolint grade for pseolint.dev

Show the grade

pseolint.dev passed the audit. Embed the badge on your site or README; it always shows your current grade.

Markdown[![pseolint grade](https://pseolint.dev/api/badge/pseolint.dev)](https://pseolint.dev/r/2SABeRewuJ)
HTML<a href="https://pseolint.dev/r/2SABeRewuJ"><img src="https://pseolint.dev/api/badge/pseolint.dev" alt="pseolint grade for pseolint.dev" /></a>

How to read this report

  • Sample, not censusScored on 80 sampled pages from sitemap.xml. Template clusters across un-sampled pages may be missed.
  • Heuristic, not verdictRules inferred from public SpamBrain guidance, a structured conversation, not Google's classifier.
  • Server-rendered by defaultWe read the HTML the server returns. Client-rendered content looks empty to us; Pro audits can render JS-heavy / SPA pages in a browser first.
  • Page budgetpseolint samples up to 200 pages on free audits (50 without an account) and treats sitemap.xml as the source of truth. Pro lifts the budget to 500 pages on manual re-audits and crawls beyond the sitemap.
  • RetentionThis report is kept permanently because the site is on the public leaderboard.
  • Fair useRetention, rate limits and crawl behaviour are documented in full at pseolint.dev/limits.