KinetixSEO research method
Research sweep edition of 12 November 2026
Some of the figures in our articles come from the KinetixSEO research sweep: our own scanner run over the homepages of a seeded random draw of public websites. This page shows how those figures are computed, what they currently say, and what they cannot tell you.
Data last updated (3 days ago) · 7 published figures
This is a fixed edition: the figures, the sample and the outcomes on this page never change, so a figure quoted from it stays checkable. The method page always shows the newest edition.
What these figures mean for your site
The sample
Which sites were measured, and how to check it
The sites were drawn before anything was scanned, from Tranco list JZPGY (a research ranking of popular domains): 10,000 domains out of the 99,001 ranked 1,000 to 100,000. The seed was picked at random by the server, so nobody chose which sites landed in it.
- Seed
- 5e2133590e30eb3d1cc64dafc0c7e2f0
- Method
- Every domain with min_rank <= rank <= max_rank gets the key sha256(seed + ":" + domain) as lowercase hex; the band is sorted by that key ascending and the first sample_size domains are the sample, in that order.
- Scanned
- 5 November 2026 to 12 November 2026, one homepage per site, one attempt each
- Full sample
- Download the draw (JSON): list ID, seed, method and every domain in order. SHA-256 3cf12837c34ae8432a92310a8d977a2e17db6d5afb7d51b46126166d2fdbd68a
Exclusion rules, fixed before the draw
- robots_blocked: robots.txt disallows the Kinetix-Research token (or *) at "/", or answers 429 or a server error (RFC 9309: complete disallow). Recorded before scanning; never fetched.
- non_resolving: the homepage fetch fails, or robots.txt gets no answer (DNS, connection, TLS or timeout). Recorded as a failed scan; not retried until it succeeds.
- non_html: the homepage answers with something other than an HTML document.
- off_domain_redirect: the homepage redirects to a different registrable domain.
An excluded domain is counted below and never replaced, so the denominator stays the full draw.
What happened to every domain
6,767 of 10,000 homepages could be scanned
- Scanned
- 6767
- Could not be reached or read
- 2814
- Asked us not to crawl (robots.txt)
- 359
14.5% of the 10000 sites refused our crawler: 1092 answered with HTTP 403, 406 or 429 (or a storefront wall) and 359 disallow it in robots.txt. Such an answer can be a bot filter, a firewall, a rate limit or a regional block; a site that refuses our crawler may refuse some search and AI crawlers the same way.
Unreachable covers no DNS answer, broken TLS, refused connections, timeouts and bot walls; a site that answered with no HTML page is counted there too. Tranco ranks domains by traffic and lookup signals, not by whether they have a website, so the draw also holds service domains with no homepage at all: DNS hosts, CDNs, tracking and API hosts. Most of the domains with no DNS answer are of that kind. The figures describe sites that have a homepage. 60 scans failed on our side and say nothing about the site; they are left out of every figure. Each domain got one attempt; a failure is recorded as a failure, not retried.
Every scan in this edition ran on one scanner version (runner image sha256:c5553e2c63dd0f2b2eea588ca48349a4b00e21d214f8b8b5671df1ed9928928c).
Methodology
How the data is collected
Our scanner runs over the homepage of each site in a seeded random draw of public websites. Each figure counts distinct sites, not scans: one site scanned several times is still one site.
Only sites where the check could actually run are counted. A homepage that did not load, or one where that part of the scan was unavailable, drops out of that figure's sample instead of counting as passing. Every figure states its own sample and the first and last scan dates it rests on, and a figure below 30 sites is not published at all.
Scans people run on their own sites with our free checker never feed these figures. Those sites chose themselves, so they cannot describe the web at large.
Figures in this edition
What this sweep measured
Share of homepages in our seeded random research sweep of public sites that publish no llms.txt file.
82% of the 6226 sites in the KinetixSEO research sweep, scanned Nov 5, 2026 to Nov 12, 2026, publish no llms.txt file.
n = 6226 · measured (3 days ago)
Method: Scanned the homepage of each site in KinetixSEO's research sweep, a seeded random draw of public sites, between Nov 5, 2026 and Nov 12, 2026 with one unchanged version of the scanner, and counted the 6226 distinct sites on which the "Missing llms.txt file" check could run. A site counts once however often it was scanned, and counts as affected if any of its scans showed the issue. From scanner version 7 on, a site whose /llms.txt request got no usable answer (a timeout, a server error or a firewall refusal) is left out of the sample; in earlier sweeps it counted as having none, so their share is an upper bound. A site that answered with an HTML page in place of the file is counted as having none.
Share of homepages in our seeded random research sweep of public sites whose robots.txt blocks at least one AI crawler.
14% of the 6574 sites in the KinetixSEO research sweep, scanned Nov 5, 2026 to Nov 12, 2026, block at least one AI crawler in robots.txt.
n = 6574 · measured (3 days ago)
Method: Scanned the homepage of each site in KinetixSEO's research sweep, a seeded random draw of public sites, between Nov 5, 2026 and Nov 12, 2026 with one unchanged version of the scanner, and counted the 6574 distinct sites on which the "AI crawlers blocked in robots.txt" check could run. A site counts once however often it was scanned, and counts as affected if any of its scans showed the issue. A site whose robots.txt could not be read for another reason (a timeout, a 4xx response such as 403, or an HTML page served in its place) leaves no trace in the scan and is counted as not blocking, so the share is a lower bound.
Share of homepages in our seeded random research sweep of public sites that carry no JSON-LD structured data at all.
54% of the 6586 sites in the KinetixSEO research sweep, scanned Nov 5, 2026 to Nov 12, 2026, carry no JSON-LD structured data on their homepage.
n = 6586 · measured (3 days ago)
Method: Scanned the homepage of each site in KinetixSEO's research sweep, a seeded random draw of public sites, between Nov 5, 2026 and Nov 12, 2026 with one unchanged version of the scanner, and counted the 6586 distinct sites on which the "No structured data found" check could run. A site counts once however often it was scanned, and counts as affected if any of its scans showed the issue.
Share of homepages in our seeded random research sweep of public sites that have no meta description.
22% of the 6587 sites in the KinetixSEO research sweep, scanned Nov 5, 2026 to Nov 12, 2026, have no meta description on their homepage.
n = 6587 · measured (3 days ago)
Method: Scanned the homepage of each site in KinetixSEO's research sweep, a seeded random draw of public sites, between Nov 5, 2026 and Nov 12, 2026 with one unchanged version of the scanner, and counted the 6587 distinct sites on which the "Missing meta description" check could run. A site counts once however often it was scanned, and counts as affected if any of its scans showed the issue.
Share of homepages with images, in our seeded random research sweep of public sites, where at least one image has no alt text.
On 21% of the 5203 sites in the KinetixSEO research sweep with images on their homepage, scanned Nov 5, 2026 to Nov 12, 2026, at least one image has no alt text.
n = 5203 · measured (3 days ago)
Method: Scanned the homepage of each site in KinetixSEO's research sweep, a seeded random draw of public sites, between Nov 5, 2026 and Nov 12, 2026 with one unchanged version of the scanner, and counted the 5203 distinct sites on which the "Missing image alt text" check could run. A site counts once however often it was scanned, and counts as affected if any of its scans showed the issue.
Share of sites in our seeded random research sweep of public sites where no XML sitemap could be found.
On 32% of the 6496 sites in the KinetixSEO research sweep, scanned Nov 5, 2026 to Nov 12, 2026, no XML sitemap could be found.
n = 6496 · measured (3 days ago)
Method: Scanned the homepage of each site in KinetixSEO's research sweep, a seeded random draw of public sites, between Nov 5, 2026 and Nov 12, 2026 with one unchanged version of the scanner, and counted the 6496 distinct sites on which the "Missing XML sitemap" check could run. A site counts once however often it was scanned, and counts as affected if any of its scans showed the issue. The scanner looks for a sitemap declared in robots.txt and at the usual paths (/sitemap.xml, /sitemap_index.xml, /wp-sitemap.xml). A sitemap kept at an unusual path and declared nowhere counts as missing, as it does for a crawler that looks in the same places.
Share of homepages in our seeded random research sweep of public sites that link no privacy policy, contact page or about page, or only some of them.
68% of the 6587 homepages in the KinetixSEO research sweep, scanned Nov 5, 2026 to Nov 12, 2026, do not link all three of a privacy policy, a contact page and an about page.
n = 6587 · measured (3 days ago)
Method: Scanned the homepage of each site in KinetixSEO's research sweep, a seeded random draw of public sites, between Nov 5, 2026 and Nov 12, 2026 with one unchanged version of the scanner, and counted the 6587 distinct sites on which the "Missing trust pages" check could run. A site counts once however often it was scanned, and counts as affected if any of its scans showed the issue. Only links on the homepage itself are read. A site that links its privacy policy, contact page or about page only from inner pages counts as missing it.
All data in this edition
Every finding, every score, 6,767 sites
Each rate is the share of the 6,767 sites in our research corpus for this sweep where the finding fired, with its 95% range. Only findings that fired on at least one site are listed. A check that could not run on a site counts as not firing there, so a rate can sit slightly below the same headline figure above, which leaves those sites out. Aggregates only: no site is named. A group of fewer than 30 sites reads "suppressed"; inside a larger group a count can be small.
Download the data
- CSV (70 KB) · SHA-256 a059fa9c1474212c2611a2775a35587762f5080bf253bf7683206402e252f1ba
- JSON (148 KB) · SHA-256 12b26d14ee76fde8c8680bbde02e2dba107fb8630082fccc20bb823f974d8095
Frozen 12 November 2026 with the sample, the scanner version and the caveats known then; the files never change, so the SHA-256 holds for a copy you saved. Free to reuse with attribution (license).
Mean 68.2 · median 70 · middle half 60–77
- 0–90
- 10–190
- 20–290
- 30–3929
- 40–49548
- 50–591,094
- 60–691,649
- 70–792,224
- 80–891,177
- 90–10046
Mean 59.7 · median 61 · middle half 52–67
- 0–90
- 10–190
- 20–290
- 30–3981
- 40–491,172
- 50–591,852
- 60–692,458
- 70–791,152
- 80–8952
- 90–1000
Scores by HTTPS
| Group | Sites | SEO | GEO |
|---|---|---|---|
| HTTPS | 6,656 | mean 68.5, median 70 | mean 59.8, median 61 |
| Not HTTPS | 111 | mean 50.3, median 49 | mean 50.1, median 47 |
Scores by top-level domain
| Group | Sites | SEO | GEO |
|---|---|---|---|
| com | 3,139 | mean 68.4, median 70 | mean 60.0, median 61 |
| org | 346 | mean 68.9, median 70 | mean 61.7, median 63 |
| net | 316 | mean 65.2, median 67 | mean 57.7, median 58 |
| ru | 198 | mean 65.5, median 66 | mean 55.7, median 56 |
| de | 174 | mean 74.1, median 76 | mean 62.8, median 64 |
| io | 130 | mean 72.2, median 75 | mean 63.9, median 64 |
| fr | 93 | mean 70.7, median 72 | mean 60.5, median 62 |
| edu | 81 | mean 70.8, median 71 | mean 68.1, median 71 |
| jp | 79 | mean 66.7, median 68 | mean 57.6, median 60 |
| com.br | 77 | mean 70.7, median 72 | mean 60.9, median 64 |
| it | 67 | mean 72.5, median 73 | mean 61.7, median 61 |
| nl | 60 | mean 71.7, median 72 | mean 59.5, median 61 |
| co.uk | 57 | mean 71.0, median 73 | mean 60.4, median 61 |
| in | 51 | mean 68.3, median 71 | mean 58.6, median 60 |
| pl | 48 | mean 72.9, median 75 | mean 61.6, median 62 |
| co | 46 | mean 70.7, median 73 | mean 59.0, median 59 |
| cn | 41 | mean 54.1, median 55 | mean 51.8, median 50 |
| ai | 40 | mean 72.9, median 73 | mean 63.0, median 63 |
| tv | 38 | mean 67.8, median 69 | mean 58.0, median 59 |
| cz | 37 | mean 71.2, median 72 | mean 61.0, median 60 |
| app | 35 | mean 69.6, median 73 | mean 58.7, median 59 |
| gov | 34 | mean 65.5, median 65 | mean 61.0, median 61 |
| me | 33 | mean 66.0, median 68 | mean 56.4, median 56 |
| se | 31 | mean 75.0, median 78 | mean 62.9, median 63 |
| co.jp | 30 | mean 67.9, median 69 | mean 58.5, median 59 |
| other | 1,486 | mean 66.5, median 68 | mean 58.3, median 59 |
Authority brand
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| No sourced, dated statistics geo_authority_brand_statistics | 6,736 | 99.5% | 99.4–99.7% | |
| Missing author/organization attribution geo_authority_brand_author_attribution | 5,971 | 88.2% | 87.4–89.0% | |
| Missing organization schema geo_authority_brand_organization_schema | 4,577 | 67.6% | 66.5–68.7% | |
| No external brand presence found geo_authority_brand_external_presence | 3,300 | 48.8% | 47.6–50.0% | |
| Inconsistent brand/entity naming geo_authority_brand_entity_consistency | 3,044 | 45.0% | 43.8–46.2% | |
| Missing named entities geo_authority_brand_named_entities | 1,199 | 17.7% | 16.8–18.6% |
Citability
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| Statistics not sourced, dated or on-topic geo_citability_supported_statistics | 6,373 | 94.2% | 93.6–94.7% | |
| No attributed quotations geo_citability_named_quotes | 6,228 | 92.0% | 91.4–92.7% | |
| No freshness signal geo_citability_freshness_signal | 5,459 | 80.7% | 79.7–81.6% | |
| Answer not front-loaded / off sweet spot geo_citability_frontloading_word_count | 4,632 | 68.5% | 67.3–69.5% | |
| No early, front-loaded answer geo_citability_answer_first | 3,292 | 48.6% | 47.5–49.8% | |
| Unsupported superlative claims geo_citability_evidence_backed_claims | 822 | 12.2% | 11.4–12.9% | |
| Stale content geo_citability_content_recency | 243 | 3.6% | 3.2–4.1% | |
| No full-length paragraph geo_citability_ideal_passage_length | 171 | 2.5% | 2.2–2.9% | |
| Stale statistics or outdated tech geo_citability_no_stale_references | 30 | 0.4% | 0.3–0.6% | |
| Most paragraphs are very long geo_citability_passages_too_long | 5 | 0.1% | 0.0–0.2% | |
| High hedge-word density geo_citability_low_hedge_density | 3 | 0.0% | 0.0–0.1% |
Multi modal
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| No data table geo_multi_modal_data_table | 6,363 | 94.0% | 93.4–94.6% | |
| No video content geo_multi_modal_video_content | 5,321 | 78.6% | 77.6–79.6% | |
| Too few images geo_multi_modal_multiple_images | 2,332 | 34.5% | 33.3–35.6% |
Technical accessibility
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| No Accept: text/markdown negotiation geo_technical_accessibility_markdown_content_negotiation | 6,362 | 94.0% | 93.4–94.6% | |
| No AI-markdown-twin route geo_technical_accessibility_markdown_twin_route | 6,171 | 91.2% | 90.5–91.8% | |
| No RSL content licence declared geo_technical_accessibility_rsl_json | 6,095 | 90.1% | 89.3–90.8% | |
| Missing TDMRep file geo_technical_accessibility_tdmrep | 6,094 | 90.0% | 89.3–90.7% | |
| Missing ai.txt file geo_technical_accessibility_ai_txt | 5,938 | 87.8% | 86.9–88.5% | |
| No RSS/Atom feed autodiscovery geo_technical_accessibility_feed_autodiscovery | 5,577 | 82.4% | 81.5–83.3% | |
| Missing llms.txt file geo_technical_accessibility_llms_txt | 5,296 | 78.3% | 77.3–79.2% | |
| Content only appears after JavaScript runs geo_technical_accessibility_raw_html_content | 1,928 | 28.5% | 27.4–29.6% | |
| AI crawlers blocked in robots.txt geo_technical_accessibility_ai_bot_access | 967 | 14.3% | 13.5–15.1% | |
| Training-intent AI bots blocked geo_technical_accessibility_training_intent_bots_unblocked | 907 | 13.4% | 12.6–14.2% | |
| Citation-intent AI bots blocked geo_technical_accessibility_citation_intent_bots_unblocked | 724 | 10.7% | 10.0–11.5% | |
| Content-Signal opts out of AI retrieval geo_technical_accessibility_content_signal_ai_input | 9 | 0.1% | 0.1–0.3% |
AI search readiness
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| No author signal ai_search_readiness_no_author_signal | 5,969 | 88.2% | 87.4–89.0% | |
| No freshness signal ai_search_readiness_no_freshness_signal | 5,459 | 80.7% | 79.7–81.6% | |
| Missing llms.txt file ai_search_readiness_missing_llms_txt | 5,296 | 78.3% | 77.3–79.2% | |
| No statistics detected ai_search_readiness_no_statistics | 3,751 | 55.4% | 54.2–56.6% | |
| No front-loaded answer ai_search_readiness_no_frontloaded_answer | 3,292 | 48.6% | 47.5–49.8% | |
| Below passage-level citability analysis ai_search_readiness_below_citability_analysis | 2,233 | 33.0% | 31.9–34.1% | |
| Low entity density ai_search_readiness_low_entity_density | 1,199 | 17.7% | 16.8–18.6% | |
| AI crawlers blocked in robots.txt ai_search_readiness_ai_bots_blocked | 967 | 14.3% | 13.5–15.1% | |
| Answers hidden in collapsed sections ai_search_readiness_answers_in_collapsed_content | 233 | 3.4% | 3.0–3.9% | |
| Content is going stale ai_search_readiness_stale_content | 220 | 3.3% | 2.9–3.7% | low 72 · medium 148 |
| llms.txt missing site name ai_search_readiness_llms_txt_no_sitename | 207 | 3.1% | 2.7–3.5% | |
| No Google "Preferred Sources" button ai_search_readiness_no_preferred_source_button | 132 | 1.9% | 1.6–2.3% |
Technical SEO
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| Missing security headers technical_seo_missing_security_headers | 5,841 | 86.3% | 85.5–87.1% | high 4,045 · medium 1,796 |
| Third-party scripts without integrity checks technical_seo_missing_subresource_integrity | 4,514 | 66.7% | 65.6–67.8% | |
| target="_blank" links without rel="noopener" technical_seo_unsafe_target_blank | 3,917 | 57.9% | 56.7–59.1% | |
| No analytics tool detected technical_seo_no_analytics_detected | 2,681 | 39.6% | 38.5–40.8% | |
| Missing XML sitemap technical_seo_missing_sitemap | 2,232 | 33.0% | 31.9–34.1% | |
| Cookies missing security flags technical_seo_insecure_cookie_flags | 2,196 | 32.5% | 31.3–33.6% | |
| Server version disclosed in response headers technical_seo_server_fingerprint_disclosed | 1,989 | 29.4% | 28.3–30.5% | |
| Uncrawlable links technical_seo_uncrawlable_links | 1,768 | 26.1% | 25.1–27.2% | high 746 · medium 1,022 |
| Slow server response time technical_seo_slow_ttfb | 1,765 | 26.1% | 25.1–27.1% | low 1,236 · medium 529 |
| Inconsistent www/non-www redirect technical_seo_inconsistent_www_redirect | 1,227 | 18.1% | 17.2–19.1% | |
| Exposed mailto email address technical_seo_mailto_exposure | 1,199 | 17.7% | 16.8–18.6% | |
| Soft 404 page technical_seo_soft_404 | 1,017 | 15.0% | 14.2–15.9% | |
| Hreflang tag issue technical_seo_hreflang_issue | 923 | 13.6% | 12.8–14.5% | |
| Text compression not enabled technical_seo_no_text_compression | 829 | 12.3% | 11.5–13.1% | |
| Dead-end page with no links technical_seo_dead_end_page | 573 | 8.5% | 7.8–9.2% | |
| Clickable elements that aren't real buttons technical_seo_non_semantic_interactive_elements | 547 | 8.1% | 7.5–8.8% | |
| Risky redirect signal technical_seo_risky_redirect_signal | 536 | 7.9% | 7.3–8.6% | high 248 · medium 288 |
| Inconsistent trailing-slash handling technical_seo_inconsistent_trailing_slash | 326 | 4.8% | 4.3–5.4% | |
| Noindex directive present technical_seo_noindex_directive | 280 | 4.1% | 3.7–4.6% | |
| Mixed content on HTTPS page technical_seo_mixed_content | 260 | 3.8% | 3.4–4.3% | |
| Google API key in page source technical_seo_exposed_google_api_key | 242 | 3.6% | 3.2–4.0% | |
| Invalid HTTPS certificate technical_seo_invalid_https_certificate | 229 | 3.4% | 3.0–3.8% | |
| Invisible but clickable elements technical_seo_transparent_functional_overlays | 195 | 2.9% | 2.5–3.3% | |
| Page returns an HTTP error technical_seo_http_error_status | 180 | 2.7% | 2.3–3.1% | |
| Not served over HTTPS technical_seo_not_https | 111 | 1.6% | 1.4–2.0% | |
| Content built with APIs Google can't run technical_seo_unsupported_indexing_api | 104 | 1.5% | 1.3–1.9% | |
| robots.txt points to a broken sitemap technical_seo_declared_sitemap_unusable | 100 | 1.5% | 1.2–1.8% | |
| Sitemap did not answer in time technical_seo_sitemap_unreachable | 97 | 1.4% | 1.2–1.7% | |
| Cross-domain canonical URL technical_seo_cross_domain_canonical | 85 | 1.3% | 1.0–1.6% | |
| Malformed sitemap technical_seo_malformed_sitemap | 57 | 0.8% | 0.7–1.1% | |
| Requires JavaScript to render technical_seo_js_required_rendering | 46 | 0.7% | 0.5–0.9% | |
| Form submits over insecure HTTP technical_seo_insecure_form_action | 27 | 0.4% | 0.3–0.6% | |
| robots.txt blocks all crawlers technical_seo_robots_disallow_all | 16 | 0.2% | 0.1–0.4% | |
| robots.txt returns a server error technical_seo_robots_txt_server_error | 14 | 0.2% | 0.1–0.3% | |
| Unresolved redirect technical_seo_unresolved_redirect | 5 | 0.1% | 0.0–0.2% | |
| Leaked credential in page source technical_seo_leaked_secret | 4 | 0.1% | 0.0–0.2% | |
| Page blocked by robots.txt technical_seo_robots_page_disallowed | 3 | 0.0% | 0.0–0.1% | |
| Invalid video sitemap entry technical_seo_invalid_video_sitemap_entry | 2 | 0.0% | 0.0–0.1% | |
| Links point to localhost technical_seo_localhost_links | 2 | 0.0% | 0.0–0.1% | |
| Invalid image sitemap entry technical_seo_invalid_image_sitemap_entry | 1 | 0.0% | 0.0–0.1% |
Trust compliance
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| Low E-E-A-T signal count local_seo_low_eeat_signal_count | 5,734 | 84.7% | 83.9–85.6% | |
| Missing trust pages trust_compliance_missing_legitimacy_pages | 4,673 | 69.1% | 67.9–70.1% | low 2,984 · medium 1,689 |
| Weak E-E-A-T signals trust_compliance_eeat_weak | 3,994 | 59.0% | 57.8–60.2% | high 808 · medium 3,186 |
| Tracking loads before consent trust_compliance_tracking_without_consent | 1,822 | 26.9% | 25.9–28.0% | |
| Fails YMYL E-E-A-T standards trust_compliance_eeat_block | 1,381 | 20.4% | 19.5–21.4% | |
| AI-manipulation patterns in the content trust_compliance_ai_manipulation_signals | 683 | 10.1% | 9.4–10.8% | |
| Possible cloaking signal local_seo_cloaking_risk_medium | 501 | 7.4% | 6.8–8.1% | |
| Some link spam signals local_seo_link_spam_medium | 468 | 6.9% | 6.3–7.5% | |
| Link-farm pattern trust_compliance_link_farm | 412 | 6.1% | 5.5–6.7% | |
| Hidden text detected local_seo_hidden_text | 235 | 3.5% | 3.1–3.9% | high 1 · medium 234 |
| Keyword stuffing suspected local_seo_keyword_stuffing | 191 | 2.8% | 2.5–3.2% | |
| Some scaled-content signals local_seo_scaled_content_medium | 170 | 2.5% | 2.2–2.9% | |
| UGC links missing rel attributes local_seo_ugc_link_compliance | 153 | 2.3% | 1.9–2.6% | |
| Some doorway page signals local_seo_doorway_risk_medium | 137 | 2.0% | 1.7–2.4% | |
| Malware signals detected local_seo_malware_signals_high | 117 | 1.7% | 1.4–2.1% | |
| Affiliate links without review language local_seo_thin_affiliation_medium | 108 | 1.6% | 1.3–1.9% | |
| No internal links on the page trust_compliance_orphan_page_risk | 91 | 1.3% | 1.1–1.6% | |
| Possible full-screen overlay on load trust_compliance_intrusive_interstitial | 57 | 0.8% | 0.7–1.1% | |
| Undisclosed sponsored content local_seo_sponsored_content_undisclosed | 47 | 0.7% | 0.5–0.9% | |
| Suspicious third-party iframes local_seo_malware_signals_iframe | 44 | 0.7% | 0.5–0.9% | |
| Few internal links on the page trust_compliance_few_internal_links | 33 | 0.5% | 0.3–0.7% | |
| Prompt injection aimed at AI readers trust_compliance_prompt_injection | 20 | 0.3% | 0.2–0.5% | |
| Third-party author byline local_seo_third_party_author | 17 | 0.3% | 0.2–0.4% | |
| High cloaking risk local_seo_cloaking_risk_high | 6 | 0.1% | 0.0–0.2% | |
| High link spam risk local_seo_link_spam_high | 4 | 0.1% | 0.0–0.2% | |
| Thin affiliate content local_seo_thin_affiliation_high | 4 | 0.1% | 0.0–0.2% | |
| Unsupported claims on a comparison page trust_compliance_comparison_overclaims | 3 | 0.0% | 0.0–0.1% |
Structural readability
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| Missing semantic <article> element geo_structural_readability_article_element | 5,147 | 76.1% | 75.0–77.1% | |
| No question-per-section structure geo_structural_readability_question_per_section | 4,791 | 70.8% | 69.7–71.9% | |
| No lists for scannability geo_structural_readability_lists | 4,486 | 66.3% | 65.2–67.4% | |
| Missing semantic <main> landmark geo_structural_readability_main_landmark | 3,615 | 53.4% | 52.2–54.6% | |
| Missing semantic <section> elements geo_structural_readability_section_elements | 2,932 | 43.3% | 42.2–44.5% | |
| Headings styled with div/span instead of h1-h6 geo_structural_readability_fake_headings | 1,355 | 20.0% | 19.1–21.0% | |
| Question headings not directly answered geo_structural_readability_question_answer_quality | 1,062 | 15.7% | 14.8–16.6% | |
| Headings that do not name their topic geo_structural_readability_generic_headings | 17 | 0.3% | 0.2–0.4% |
On page SEO
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| Missing Twitter Card tags on_page_seo_missing_twitter_card | 3,799 | 56.1% | 55.0–57.3% | |
| Heading appears before its parent level on_page_seo_heading_level_skipped_in_document_order | 3,570 | 52.8% | 51.6–53.9% | |
| Missing og:image tag on_page_seo_missing_og_image | 3,368 | 49.8% | 48.6–51.0% | |
| Missing og:description tag on_page_seo_missing_og_description | 3,047 | 45.0% | 43.8–46.2% | |
| No social profile links on_page_seo_missing_social_profile_links | 2,835 | 41.9% | 40.7–43.1% | |
| Missing og:title tag on_page_seo_missing_og_title | 2,763 | 40.8% | 39.7–42.0% | |
| First heading is not the H1 on_page_seo_first_heading_not_h1 | 2,628 | 38.8% | 37.7–40.0% | |
| Missing canonical tag on_page_seo_missing_canonical | 2,527 | 37.3% | 36.2–38.5% | |
| Title tag too short on_page_seo_title_too_short | 2,238 | 33.1% | 32.0–34.2% | |
| Heading level skipped on_page_seo_heading_hierarchy_skip | 2,071 | 30.6% | 29.5–31.7% | |
| Missing H1 heading on_page_seo_missing_h1 | 2,039 | 30.1% | 29.0–31.2% | |
| Outdated meta keywords tag on_page_seo_meta_keywords_present | 1,824 | 27.0% | 25.9–28.0% | |
| Missing meta description on_page_seo_missing_meta_description | 1,646 | 24.3% | 23.3–25.4% | |
| Meta description too long on_page_seo_meta_description_too_long | 1,637 | 24.2% | 23.2–25.2% | |
| Multiple H1 headings on_page_seo_multiple_h1 | 1,151 | 17.0% | 16.1–17.9% | |
| Generic anchor text on_page_seo_generic_anchor_text | 1,011 | 14.9% | 14.1–15.8% | |
| Missing html lang attribute on_page_seo_missing_html_lang | 894 | 13.2% | 12.4–14.0% | |
| Title tag too long on_page_seo_title_too_long | 742 | 11.0% | 10.2–11.7% | |
| Too much bold text on_page_seo_strong_tag_overuse | 631 | 9.3% | 8.7–10.0% | |
| Deprecated HTML tag on_page_seo_deprecated_html_tag | 397 | 5.9% | 5.3–6.5% | |
| Missing title tag on_page_seo_missing_title | 194 | 2.9% | 2.5–3.3% | |
| Duplicate canonical tags on_page_seo_duplicate_canonical | 54 | 0.8% | 0.6–1.0% | |
| Non-descriptive URL path on_page_seo_non_descriptive_url_path | 7 | 0.1% | 0.1–0.2% | |
| Page type mismatch with SERP on_page_seo_page_type_mismatch_serp | 1 | 0.0% | 0.0–0.1% |
Images
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| Images without width and height images_missing_dimensions | 3,770 | 55.7% | 54.5–56.9% | |
| Missing responsive image srcset images_missing_srcset | 3,664 | 54.1% | 53.0–55.3% | |
| Legacy image format images_legacy_image_format | 3,288 | 48.6% | 47.4–49.8% | low 540 · medium 2,748 |
| No images on page images_no_images | 1,532 | 22.6% | 21.7–23.7% | |
| Oversized image files images_oversized_files | 1,190 | 17.6% | 16.7–18.5% | low 537 · medium 653 |
| Video issue detected images_video_issue | 1,121 | 16.6% | 15.7–17.5% | |
| Missing image alt text images_missing_alt_text | 1,110 | 16.4% | 15.5–17.3% | high 631 · medium 479 |
| Lazy-loaded hero image images_lazy_loaded_lcp_image | 1,109 | 16.4% | 15.5–17.3% | |
| Images set as CSS backgrounds images_css_background_images | 733 | 10.8% | 10.1–11.6% | |
| Camera or placeholder filenames images_generic_filenames | 354 | 5.2% | 4.7–5.8% | |
| Placeholder alt text images_generic_alt_text | 229 | 3.4% | 3.0–3.8% | |
| Robots rules limit image display images_robots_restrict_images | 34 | 0.5% | 0.4–0.7% | low 25 · medium 9 |
| Keyword-stuffed alt text images_keyword_stuffed_alt_text | 21 | 0.3% | 0.2–0.5% | low 15 · medium 6 |
Schema
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| No structured data found schema_missing_json_ld | 3,710 | 54.8% | 53.6–56.0% | |
| Invalid breadcrumb markup schema_breadcrumb_invalid | 690 | 10.2% | 9.5–10.9% | |
| Missing required schema field schema_missing_required_field | 688 | 10.2% | 9.5–10.9% | |
| Schema uses HTTP @context schema_http_context | 517 | 7.6% | 7.0–8.3% | |
| SERP-retired schema type schema_serp_retired_type | 252 | 3.7% | 3.3–4.2% | |
| Client-side rendering blind spot schema_csr_blind_spot | 157 | 2.3% | 2.0–2.7% | |
| No breadcrumb trail on a deep page schema_breadcrumb_missing | 133 | 2.0% | 1.7–2.3% | |
| Conflicting or duplicate schema entities schema_duplicate_id | 47 | 0.7% | 0.5–0.9% | low 17 · medium 30 |
| Unsupported app category in schema schema_invalid_application_category | 47 | 0.7% | 0.5–0.9% | |
| Article schema missing image schema_article_missing_image | 44 | 0.7% | 0.5–0.9% | |
| Article schema image too small schema_article_image_too_small | 12 | 0.2% | 0.1–0.3% | |
| Deprecated schema type schema_deprecated_type | 9 | 0.1% | 0.1–0.3% | |
| Low-quality FAQ markup schema_faq_quality | 6 | 0.1% | 0.0–0.2% | |
| Article headline too long schema_article_headline_too_long | 4 | 0.1% | 0.0–0.2% | |
| Article schema violation schema_article_violation_other | 1 | 0.0% | 0.0–0.1% |
Content quality
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| Thin content content_quality_thin_content | 3,408 | 50.4% | 49.2–51.6% | critical 2,252 · high 1,141 · medium 15 |
| No first-hand experience signals content_quality_no_firsthand_experience | 2,177 | 32.2% | 31.1–33.3% | |
| No specific claims or data content_quality_no_specific_claims | 1,871 | 27.7% | 26.6–28.7% | |
| Low readability content_quality_low_readability | 1,299 | 19.2% | 18.3–20.2% | high 378 · medium 921 |
| H1 doesn't match page content content_quality_h1_content_mismatch | 677 | 10.0% | 9.3–10.7% | |
| Paywalled or gated content content_quality_paywalled | 258 | 3.8% | 3.4–4.3% | |
| AI-generic filler language content_quality_filler_language | 1 | 0.0% | 0.0–0.1% |
Local SEO
| Check | Sites | Rate | 95% range | By severity |
|---|---|---|---|---|
| Missing geo coordinates local_seo_missing_geo_coordinates | 87 | 1.3% | 1.0–1.6% | |
| Missing opening hours local_seo_missing_opening_hours | 59 | 0.9% | 0.7–1.1% | |
| Incomplete NAP data local_seo_incomplete_nap | 40 | 0.6% | 0.4–0.8% | |
| Phone number contradicts the schema local_seo_conflicting_nap_phone | 22 | 0.3% | 0.2–0.5% | |
| Local business without LocalBusiness schema local_seo_unmarked_local_business | 13 | 0.2% | 0.1–0.3% | |
| Low review count local_seo_low_review_count | 1 | 0.0% | 0.0–0.1% |
Checks that could not run (11)
Not a problem on the site: how often a part of the scan was unavailable. Kept apart so it never reads as a defect rate.
- Core Web Vitals not measured (performance_cwv_not_measured): 100.0%
- Text-in-image check not run (geo_multi_modal_text_in_images_not_measured): 54.1%
- ai.txt could not be checked (geo_technical_accessibility_ai_txt_not_measured): 10.7%
- RSL licence could not be checked (geo_technical_accessibility_rsl_json_not_measured): 9.7%
- TDMRep file could not be checked (geo_technical_accessibility_tdmrep_not_measured): 9.6%
- Markdown twin route could not be checked (geo_technical_accessibility_markdown_twin_route_not_measured): 8.2%
- llms.txt could not be checked (geo_technical_accessibility_llms_txt_not_measured): 5.6%
- llms.txt could not be checked (ai_search_readiness_llms_txt_not_measured): 5.6%
- Markdown content negotiation could not be checked (geo_technical_accessibility_markdown_content_negotiation_not_measured): 2.9%
- Content couldn't be analyzed (content_quality_segment_unavailable): 0.1%
- Structured data couldn't be checked (schema_segment_unavailable): 0.0%
Editions
Every sweep, kept as it was published
- 12 November 2026 · 6767 of 10000 homepages scanned · Tranco list JZPGY (shown on this page)
- 25 October 2026 · 3096 of 5000 homepages scanned · Tranco list 262W9
- 20 October 2026 · 347 of 500 homepages scanned · Tranco list GQG5K
Quote a figure from its edition page: it never changes, so a reader who follows your link finds the number you quoted.
Limitations
What these figures do not tell you
- Only the homepage of each site is scanned. Inner pages, which often differ, are not measured.
- Each figure counts sites where the check could actually run. Sites that failed to load, or where that part of the scan was unavailable, are left out of that figure's sample rather than counted as passing.
- A site counts as affected if any of its scans in the period showed the issue, so a site that fixed the issue between two scans still counts once as affected.
- Figures are only computed within one unchanged version of the scanner. When our checks change, the figure restarts from the newest version rather than mixing the two.
- Scans that people ran on their own sites, and scans we ran for outreach or competitor research, are never used. Those sites chose themselves or were chosen by us, so they say nothing about the web at large.
How to cite
Use this data
KinetixSEO (2026). Research sweep edition of 12 November 2026 [Method and data]. KinetixSEO research sweep, retrieved 12 November 2026. https://kinetixseo.com/learn/methods/research-sweep/2026-11-05-tranco-JZPGY-5e213359
Published under a CC BY 4.0 license: free to reuse with attribution. Quote a figure together with its sample size and measurement date, as shown above.
Where does your own site land?
Run the same kinds of checks on your own page with a free SEO and GEO audit. No signup.