Let's start with what works — Evapolar's foundation is better than that of most sites we audit. Not a single AI crawler is blocked: 98 live requests from fourteen User-Agents (GPTBot, ClaudeBot, PerplexityBot, CCBot and others) returned code 200 and byte-for-byte the same content a regular browser sees. Content is available without JavaScript — the raw HTML of a product page actually contains more text than the rendered version, which means models that do not execute scripts see the full page. Core Web Vitals from real users are in the green (LCP 1,538 ms, CLS 0.00, INP 173 ms), there is not a single thin page, and orphan pages and pages outside the sitemap number zero. Technically, the site is healthy.
More than that, the models already read you — and they read you more often than your competitors. According to Brand Radar, evapolar.com is the most-cited domain in the niche: 141 citations against 107 for Portacool and 102 for Sylvane. DataForSEO confirms the ranking: 5,818 citations of site pages. And traffic from models is the site's best channel in revenue terms: at 0.84% of sessions it delivers 2.20% of revenue, ChatGPT converts at 2.08% against 0.28% for regular organic, and revenue per session is $2.85 against $0.42. Over six months the channel has grown 5.9×.
There is exactly one problem, and it is not technical. Models take facts from the Evapolar blog — and recommend Arctic Air, Dreo, Vornado, Zero Breeze. The brand is named in only 5% of purchase-intent ChatGPT answers against 20% in Google AI Overviews. The fourfold gap has a simple explanation: Google reconstructs the "Evapolar" entity from its own Knowledge Graph, which holds Crunchbase, Amazon and ten years of press coverage, while a language model has no such fallback — it sees only what the site states about itself in machine-readable form. And the site states almost nothing: Organization markup is broken on all 1,068 pages (no identifier, the logo points to a 404, half the profile links are empty strings), and pages for press, awards and team do not exist, even though a ready-made press kit with Wired, Forbes and TechCrunch logos sits in the company's open cloud storage.
The second layer of the same problem — content does not convert into sales. Of 415 articles, only 14 (3.4%) contain a link to a product or collection within the body text; the remaining links are the navigation menu, identical across the whole site. Articles with no commercial path collect roughly 39,900 visits per month and generate $0. Meanwhile the product pages omit the key competitive differentiator: the words "without a window", "ventless", "no hose" never appear once — and it is precisely this query cluster (413 queries, 330,910 search volume) that describes the product literally, and precisely where models recommend competitors.
Strategic conclusion. Evapolar does not need to win the models' attention — it already has it. What it needs is to turn citation into recommendation: explain to machines what this company is (one template fix covers 1,068 pages), put "works without a window" back on the product pages, and connect the blog to the catalog. These three actions require no new content and close the gap between 5% and 20%.
| Section | Score | Weight | Comment |
|---|---|---|---|
| AI crawler accessibility | 85 | ×2 | Main domain fully open; points deducted for the closed knowledge base |
| Readiness for AI answers | 42 | ×2 | Content is citable but tied neither to the brand nor to the catalog |
| Technical audit | 62 | ×1.5 | Healthy base, but half of impressions go to non-canonical addresses |
| Semantics and content plan | 55 | ×1.5 | 1.47M of addressable search volume uncovered |
| Visibility in model answers | 48 | ×1 | 1st by citations, 5th by brand mentions |
| E-E-A-T | 24 | ×1 | The company entity does not exist in machine-readable form |
| Structured data | 38 | ×1 | 4 critical errors, risk of manual actions |
| External placements | 60 | ×1 | Clean profile, but absent from the key roundups |
| # | Check | Status | Comment / action |
|---|---|---|---|
| AI accessibility | |||
| 1 | robots.txt | PASS | User-agent: * / Allow: /, no restrictions |
| 2 | Explicit rules for AI bots | PASS* | No rules — bots fall through to the residual *. Add explicit sections |
| 3 | Live bot checks | PASS | 14 UAs × 7 pages = 98 requests, all 200, content identical to the browser's |
| 4 | Rendering without JS | PASS | Raw HTML has more text than the DOM; JSON-LD is present before JS |
| 5 | Sitemap | PASS* | All pages covered; 122 URLs in the sitemaps return a code ≠ 200 |
| 6 | Subdomain architecture | FIXcritical | support is closed to everyone; api serves a third-party placeholder; 3 subdomains abandoned |
| 7 | Knowledge base in the index | FIXcritical | support.evapolar.com → 403 for everyone, Googlebot included |
| 8 | Common Crawl | Blocked | API unavailable (503, >30 attempts). Repeat the check |
| Technical audit | |||
| 9 | Response codes | PASS | 0 5xx errors, 2 internal 404s, 1 redirect chain |
| 10 | Core Web Vitals (field) | PASS* | LCP 1,538 / CLS 0.00 / INP 173 — green zone. INP 216 on product pages is above threshold |
| 11 | Core Web Vitals (lab) | PASS* | Performance 38–43: no headroom, 953 KB of unused JS |
| 12 | Server speed | PASS | Median response 0.21 s, no pages slower than 2 s |
| 13 | Canonical | FIXcritical | 111 pages serve two conflicting rel=canonical |
| 14 | Non-canonical URLs | FIXcritical | 48% of impressions and 32% of clicks bypass the canonical addresses |
| 15 | Parameter-based pagination | FIXcritical | ?page=5000 returns 200 + self-canonical; the URL space is infinite |
| 16 | Broken links | PASS* | 59 unique broken URLs, of which 3 are internal |
| 17 | Duplicate title / H1 | FIXmedium | 218 duplicate titles; 17 pages with two H1s |
| 18 | Orphan pages | PASS | 0 pages without inbound links |
| International configuration | |||
| 19 | Locale coverage | PASS* | en / es / de linked correctly; German translations have no internal links |
| 20 | hreflang | PASS | 1,068 of 1,068 pages, 4 tags, no /fr/ leftovers |
| 21 | Removed /fr/ locale | FIXcritical | Indexed pages return 404; 16,665 impressions, one URL at position 1.1 |
| 22 | Locale mixing | PASS | No language mixing found in internal links |
| Readiness for AI answers | |||
| 23 | CTR against impressions | FIXhigh | 0.974% in positions 5–10 against an expected 2–4% on 4.75M impressions |
| 24 | Content extractability | PASS* | Corpus average 88.8; 72 on money pages |
| 25 | Positioning on product pages | FIXcritical | "Without a window" is never mentioned on the key pages |
| 26 | Blog-to-catalog connection | FIXcritical | 14 of 415 articles lead to a product; ≈39,900 visits/mo generate $0 |
| 27 | E-E-A-T and authorship | FIXcritical | 24/100; Organization broken on every page |
| 28 | Content freshness | FIXhigh | 227 old pages are flagged as fresh; 191 are genuinely outdated |
| 29 | Cannibalization | FIXhigh | 43 duplicate pairs, 86 URLs — 16% of the indexable corpus |
| 30 | Missed internal linking | FIXhigh | 27 confirmed opportunities; /collections/without-hose — 117 links against 1,774 |
| 31 | Structured data: reviews | FIXcritical | Amazon reviews marked up as first-party — risk of manual actions |
| 32 | Structured data: coverage | FIXhigh | BreadcrumbList — 0 pages, FAQPage — 0 despite visible FAQs |
| Visibility in models | |||
| 33 | Domain citation rate | PASS | 141 citations — 1st in the niche |
| 34 | Brand mentions | FIXcritical | 5th place (73); 443 answers include competitors but not Evapolar |
| 35 | Share of Voice | FIXhigh | ≈12.4%; 5% in ChatGPT against 20% in Google AI Overviews |
| 36 | LLM traffic in GA4 | PASS* | Best channel by ARPU, but the native report understates it by 44% |
| 37 | Revenue attribution | FIXcritical | Six months of data lost: 120K sessions with zero revenue |
| 38 | Bot crawl activity | PASS* | Estimated from proxy signals; server logs were not provided |
| Semantics and links | |||
| 39 | Semantic coverage | FIXhigh | 2,615 keywords / 1.47M search volume outside coverage |
| 40 | "Without a window" cluster | FIXcritical | 413 queries / 330,910 search volume; the brand does not appear |
| 41 | Backlink profile | PASS | 954 domains, spam score 18 — clean profile |
| 42 | Presence in roundups | FIXhigh | Absent from bobvila and sylvane, where 4 competitors are present |
| 43 | Donor inventory quality | PASS* | Half of the link gap (504 domains) is link networks — do not replicate |
| Security (outside SEO) | |||
| 44 | Subdomain control | FIXcritical | api.evapolar.com — a subdomain takeover vector |
| 45 | Public storage access | FIXhigh | 186 objects in S3 are anonymously accessible |
There are no blocks. Checking 14 User-Agents across 7 page types — 98 requests — produced the same result every time: code 200 and a byte-for-byte identical response to the control browser request. We tested GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, Googlebot, CCBot, Bytespider, Meta-ExternalAgent, Applebot.
Content is available without JavaScript. This matters: models do not execute scripts. On a product page the raw HTML holds 24,591 characters of text against 18,044 in the rendered DOM — meaning more is visible without JS, not less. The source code contains the price, full specifications, a comparison table and ProductGroup markup with 15 product variants.
The knowledge base is unavailable to anyone. support.evapolar.com (Zendesk Help Center) returns 403 to everyone — including a regular browser and Googlebot. This is a Cloudflare challenge at the Zendesk configuration level, not anti-AI protection. The consequence: maintenance instructions, answers about "it isn't cooling", warranty terms — all of it sits outside Google's index and outside the models. And service questions are exactly what people most often ask assistants.
The challenge behaves inconsistently between checks, so client-side diagnostics should start with the WAF settings in the Zendesk account.
agents.md and llms.txt exist but are empty of meaning. Shopify serves them automatically — they advertise the platform and say nothing about Evapolar: no product line, no core differentiator ("evaporative cooler ≠ air conditioner"), no FAQ. The files are editable. This is the cheapest lever in the entire audit: a single file read specifically by AI agents.
Common Crawl could not be checked — the API returned 503 across more than 30 attempts. The initial "0 URLs across four indexes" result is an artifact of that failure, not evidence of absence; it was excluded from the report.
ProductGroup markup with 15 variants.support.evapolar.com returns 403 to everyone, Googlebot included — the entire Zendesk knowledge base is outside both the index and the models.agents.md and llms.txt are Shopify defaults: they describe the platform, not Evapolar.Start with the Zendesk WAF settings to lift the 403 on support.evapolar.com — service questions are what people ask assistants most. Then fill agents.md with real content about Evapolar: product line, the "evaporative cooler ≠ air conditioner" differentiator and an FAQ. Add explicit robots.txt sections for the AI bots instead of leaving them on the residual * rule, and re-run the Common Crawl check once the API recovers.
The site is technically sound: 0 5xx errors, 2 internal 404s, one redirect chain, a median server response of 0.21 s, no orphan pages, no pages outside the sitemap.
The problems are concentrated in one place — half of search traffic arrives at the wrong addresses.
| Stream | Impressions | Clicks | CTR |
|---|---|---|---|
| Canonical addresses | 6,174,930 (52.0%) | 61,292 (68.2%) | 0.996% |
| Non-canonical | 5,695,247 (48.0%) | 28,580 (31.8%) | 0.507% |
The main sources: legacy /blog/ addresses instead of /blogs/blog/ — 32.6% of impressions, and www instead of the main domain — 15.0%.
The redirect is only partially rolled out. A check of 40 random real articles: 26 return 301, 14 return 404. The rule works on popular pages but not on the tail. What is needed is a blanket pattern redirect across the whole prefix, including /blog/es/, not a page-by-page list.
Separately, 40 AMP addresses (23,977 impressions, one at position 1.6) and 130 URLs of the form /blog/content/images/... remain unhandled.
/fr/ was deleted without redirects to equivalents. The pages remain in the index: 20 of the top 25 fr addresses return 404, for a total of 16,665 impressions. One URL sits at position 1.1 with 9,843 impressions and serves an error.
The root addresses (/fr/, /fr/shop) already redirect — it is the articles and products that are unhandled.
?page=5000 on tag listings returns 200 and a self-canonical. With 342 listings the URL space is literally infinite — this broke the full site crawl twice. The index is protected by a noindex directive, but crawl budget is spent for nothing, including by the models' crawlers.
111 pages serve two mutually exclusive rel=canonical tags at once — one to self and one to the blog root. Faced with a conflict, Google discards both signals.
The theme template drops a slash when concatenating addresses. Two symptoms:
"logo": "https:files/logotype_gray.svg" in the organization markup — on all 1,068 pages, and the address returns 404;author.url of the form /depages/eugenedubovoy and /espages/eugenedubovoy — 404 on 207–215 articles, while the correct /de/pages/... and /es/pages/... work fine.Fixed with a single edit. This is the first candidate for the roadmap.
For real users (CrUX, 07/18–08/14/2026, mobile), everything is in the green:
| Metric | p75 | Threshold | Verdict |
|---|---|---|---|
| LCP | 1,538 ms | ≤ 2,500 | good |
| CLS | 0.00 | ≤ 0.1 | good |
| INP | 173 ms | ≤ 200 | good |
The only deviation is INP 216 ms on product pages, above the threshold. The cause is visible in the lab test: 953 KB of unused JavaScript and 6.3 s of main-thread work.
A lab Performance score of 38–43 alongside green field data is normal: Lighthouse emulates a slow device. There are no penalties for this score and no need to optimize for it. But it does show an absence of headroom: the site passes thanks to a good audience, and adding one more script would push product pages into the red first.
/blog/ redirect is only half rolled out — on 40 random articles, 26 return 301 and 14 return 404./fr/ locale still holds 16,665 impressions on 404s, including one URL at position 1.1 with 9,843 impressions.?page=5000 returns 200 with a self-canonical on 342 tag listings — an infinite URL space that broke the full crawl twice.rel=canonical tags, so Google discards both signals.Organization logo on all 1,068 pages and author.url on 207–215 articles.Roll out a blanket pattern redirect for the whole /blog/ prefix (including /blog/es/, the AMP suffix and the 130 /blog/content/images/... addresses) rather than a page-by-page list, and redirect the removed /fr/ articles and products to their English equivalents. Remove the second rel=canonical from the template, cap ?page= at the real page count, and fix the dropped slash — one line that repairs the logo across 1,068 pages and author links across 207 articles. Cut unused JavaScript on the product template to bring INP 216 ms back within threshold.
📊 broken-links · 📊 redirects · 📊 duplicate-titles
This is the core of the audit: why models read the site but do not recommend the brand.
Organization markup is the only way to tell a model what company stands behind the content. On evapolar.com it is broken identically on all 1,068 pages:
@id — the entity has no identifier, and there is nothing to link the articles to;logo points to a 404;sameAs holds five empty strings out of eight, and the Facebook link returns 400;address, legalName (the legal entity is CoolTrade Inc.), foundingDate, founder or contactPoint.The defect is systemic — it lives in a shared theme file. That makes the fix cheaper (one edit repairs three locales) and explains the "20% in AI Overviews against 5% in ChatGPT" gap.
The company's open cloud storage holds a ready-made press kit: logos from Wired, Forbes, TechCrunch, Mashable, PCMag, BuzzFeed, Business Insider, Engadget and a press release with verifiable facts — three international awards in 2017, a finalist place at the IOT/WT Innovation World Cup, 30,000 devices in 125 countries.
On the site there is not a single mention. The pages /pages/press, /pages/awards, /pages/team and /pages/reviews return 404. The press release points to evapolar.com/press — also a 404.
On 15 product addresses (all three locales), reviews sourced from Amazon are marked up as reviews of the product on this site. The section itself is labeled "Verified reviews from Amazon customers" — that is, the site acknowledges the third-party origin and serves them as its own anyway.
All 10 reviews carry a rating of 5, the publication date is missing, and a service attribute is duplicated 60 times instead of 10, spawning phantom product entities.
This is a direct violation of the Google Review snippet policy. The validator stays silent about it: Screaming Frog reports 0 errors across all 1,068 pages — what is broken is the policy, not the syntax.
This is the one finding that should be fixed before all the others.
Of 415 articles, only 14 (3.4%) contain a link to a product or collection in the body text. Formally links are everywhere, but by position they are 4,800 navigational and 400 footer links — that is, the menu, identical across the whole site.
Articles with no commercial path collect ≈39,900 visits per month and generate $0.
A telling example: /blogs/blog/air-conditioner-does-not-keep-rv-cool — 20,454 visits per month, while the /collections/for-rv-camper collection exists right alongside it and the article does not link to it.
The blog's own quality is high: extractability 97, E-E-A-T 88 — higher than on the commercial pages. The issue is not the articles, it is that there is nowhere to go from them.
On /products/evachill, /products/evalight, /products/evasmart and the homepage there are zero mentions of "without a window", "ventless", "without hose", "exhaust" or "freon". The English and German versions are the same.
The word "window" appears 4 times on the evaCHILL page — all inside third-party reviews, and in a sense that undermines the positioning: "if you do not ventilate your room, eventually the room will get too humid".
The right wording does exist — but only on collection pages, which have 8× fewer impressions and 117 inbound links against 1,774 for the general catalog. None of the six articles ranking for "without a window" queries links to the relevant collection.
The "without a window" cluster: 413 queries, 330,910 search volume, delivering 377 clicks per year.
Additionally on the money pages: the target query is missing from the H1 on all 10 pages, there is not a single table (comparisons are laid out as flat blocks), FAQPage is not marked up anywhere despite questions being present on 8 pages, and 60–79% of a product page's text is third-party reviews quoting the outdated $79 price against the current $99.
415 dated pages carry just 19 unique modification-date values; seven values cover 326 pages. 227 pages older than two years are flagged as updated within the last 180 days.
Recalculated by publication date: 191 pages are genuinely outdated, including 10 comparisons up to 4.3 years old. Another 217 pages have no date at all — all product, category and landing pages.
43 pairs of fully identical text, 86 addresses — 16% of the indexable corpus. Both copies in every pair are indexable and self-referencing, with not a single noindex directive.
Organization markup is broken identically on all 1,068 pages: no @id, a 404 logo, five empty strings out of eight in sameAs, and no address, legalName, foundingDate, founder or contactPoint./pages/press, /pages/awards, /pages/team and /pages/reviews all return 404.Remove the first-party markup from the Amazon reviews before anything else — it is the only finding carrying manual-action risk. Then publish a new Organization block with @id, a working logo and a complete sameAs, build /pages/press, /pages/awards and /pages/team from the press kit that already exists, add a "Works without a window" block to every product page and move the FAQ over from the collections. Add contextual links from the 38 articles with ≥200 visits/mo to the relevant collections, merge the 43 duplicate pairs by 301 with a synchronized hreflang fix, and stop the bulk restamping of dates.
📊 pages · 📊 insights · 📊 money-pages · 📊 ctr-gap · 📊 duplicates
| Metric | Evapolar's position |
|---|---|
| Domain citations (Brand Radar) | 141 — 1st place (Portacool 107, Sylvane 102, Dreo 73) |
| Brand mentions | 73 — 5th place (Arctic Air 119, Zero Breeze 105, Dreo 100, Hessaire 97) |
| Presence in ChatGPT answers | 5% |
| Presence in Google AI Overviews | 20% |
443 answers mention competitors but not Evapolar. The combined volume of those prompts is 1,496,500.
The gap between first place by citations and fifth by mentions is the measurable expression of the problem: the content is used as a source of facts, but not as a brand recommendation.
GA4 data for the clean window (April–August 2026):
| Metric | LLM traffic | Regular organic |
|---|---|---|
| Sessions | 2,101 (0.84%) | 65,946 |
| Share of revenue | 2.20% | 11.8% |
| ARPU | $2.85 | $0.42 |
| Conversion rate | 2.08% | 0.28% |
ChatGPT converts 7.4× better than organic, and ARPU is 6.8× higher. The channel grew 5.9× over six months. ChatGPT accounts for 85% of the channel's traffic and 98% of its revenue.
Mobile delivers 82% of channel revenue on 69% of its traffic. The best ARPU is Switzerland ($5.74).
From October 2025 through March 2026, e-commerce attribution was not working: 120 thousand sessions, zero transactions and zero revenue across every channel at once. This is not a drop in sales but a failure in event delivery.
All the figures above are calculated on the clean window. Before making any channel decisions, confirm that the purchase event is arriving consistently.
Separately: GA4's native "AI Assistant" channel sees 1,431 sessions against 2,577 under the extended rule — a 44% understatement of the channel.
Confirm the purchase event is arriving consistently before making any channel decisions, and switch reporting to the extended LLM-source rule so the channel is not understated by 44%. To convert citations into mentions, the levers are the entity fixes in section 4 and the roundup placements in section 7 — the content itself is already being read.
Addressable opportunity: 2,615 keywords / 1,472,950 search volume. Of these, 639 keywords (922,190) already have pages but rank in positions 11–50; 1,976 keywords (550,760) have no visibility at all.
The plan: 64 clusters, 41 new pages, 23 updates to existing ones; 42 clusters matter specifically for visibility in models.
A telling US comparison: Evapolar ranks for 1,201 queries but only 100 in the top 10. Portacool has 261 in the top 10 on a smaller overall footprint.
An anomaly worth a quick check: best portable air cooler — 40,500 searches per month, difficulty 15, and the site sits at position 22.6 despite having a dedicated page.
Seasonality is severe: July delivers 10.6× more clicks than October. Content for the 2027 season must be published in February–April — indexing takes 2–4 months, and June is already too late.
best portable air cooler — 40,500 searches/mo at difficulty 15 — sits at position 22.6 despite a dedicated page existing.Publish the 41 planned pages in February–April so indexing (2–4 months) lands before the season — June is already too late. Start with the 639 keywords that already have pages in positions 11–50, the cheapest volume in the set, and diagnose best portable air cooler separately: position 22.6 at difficulty 15 with a dedicated page points at a page-level problem, not a content gap.
📊 keywords-gap · 📊 page-plan · 📊 content-gap
The backlink profile is clean: 954 referring domains, spam score 18.
bobvila.com runs a review titled "The Best Evaporative Air Coolers of 2026" and recommends Uthfy, Arctic Air, Portacool, Dreo, Hessaire, Soleey — Evapolar is absent, even though four competitors have links there. sylvane.com has its own roundup, "Best Evaporative Swamp Coolers 2026", also without Evapolar.
These are exactly the pages models cite when asked for the best personal evaporative cooler. Being absent from them subtracts more from visibility than any link-buying program adds.
The winners on the missed prompts are review sites (rtings 379 citations, Consumer Reports 333, Lowe's 583), not competitor sites. The lever here is external placements, not on-site fixes.
Of 1,000 donors, 504 are classified as "do not replicate" — networks on free hosting and PBNs. Some of them pass the formal spam filter (score 27 against a threshold of 30), so the list was assembled manually from host patterns.
Specialized climate-equipment directories open to paid placement do not exist — the vertical monetizes through reviews. The entire HVAC segment works through pitching only.
bobvila.com ("The Best Evaporative Air Coolers of 2026") recommends Uthfy, Arctic Air, Portacool, Dreo, Hessaire and Soleey, with four competitors linked and Evapolar absent; sylvane.com's "Best Evaporative Swamp Coolers 2026" is the same story.Pitch bobvila.com and Sylvane with a protocol of first-party measurements — a line in those roundups moves visibility more than any link-buying program. Treat the 504 "do not replicate" donors as a blocklist rather than a target list, and verify the Reddit figures manually before acting on them.
📊 authority-placements · 📊 inventory-buylist · 📊 pitch-targets · 📊 do-not-replicate
api.evapolar.com DNS recordrel=canonical/blog/* → /blogs/blog/*, including /blog/es/ and the /amp/ suffix/fr/ to English equivalentswww → main domainOrganization markup with @id, a working logo and a complete sameAs?page= (404 beyond the real page count)/pages/press, /pages/awards and /pages/team built from the existing press kitFAQPage markup on 21 collections and BreadcrumbListagents.md with content about EvapolarSources: Screaming Frog crawl on a dedicated droplet (1,068 HTML pages, three locales), GA4 Data API (property 272829378), Search Console API (12 months), CrUX and PageSpeed Insights, DataForSEO (Backlinks, Labs, LLM Mentions), Ahrefs Brand Radar, Google Ads Keyword Planner, live requests from 14 User-Agents × 7 pages, manual JSON-LD collection.
broken-links was cleaned before delivery: the raw export contained 10,415 rows, but 6,863 were repeats of 22 footer links and 3,395 were artifacts of crawler rate limiting. The tab contains 59 unique broken addresses, of which 3 are internal.| Section | File |
|---|---|
| AI crawler accessibility | ai-crawler-access-2026-08-16.md |
| Technical audit | tech-audit-2026-08-16.md |
| AI visibility monitoring | ai-visibility-monitoring-2026-08-16.md |
| On-page audit of money pages | onpage-audit-2026-08-16.md |
| Page-by-page corpus audit | corpus-audit-2026-08-16.md |
| E-E-A-T | eeat-audit-2026-08-16.md |
| Structured data | schema-audit-2026-08-16.md |
| Semantic coverage | semantic-coverage-2026-08-16.md |
| External placements | external-placements-2026-08-16.md |
Data: client spreadsheet — 16 tabs.
Organization JSON-LD with @id, a working logo, legalName, foundingDate, founder and an extended sameAs — E-E-A-T sectionPerson JSON-LD as a standalone entity with correct profiles — same sectionBreadcrumbList, FAQPage, CollectionPage and Article JSON-LD with an end-to-end @id graph — structured data sectionduplicates tabinsights tab