Aug 16, 2026

EvapolarAI Visibility Audit

evapolar.com · Shopify D2C store selling personal evaporative coolers · 42 product pages, 415 blog articles, three locales (en / es / de), 1,068 pages in the indexable perimeter
Prepared by ESA Digital · Screaming Frog crawl · GA4 Data API (property 272829378) · Search Console API · CrUX and PageSpeed Insights · DataForSEO LLM Mentions · Ahrefs Brand Radar · live checks across 14 User-Agents

1.Executive summary

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%.

Overall score
58
/ 100
Needs work
SectionScoreWeightComment
AI crawler accessibility85×2Main domain fully open; points deducted for the closed knowledge base
Readiness for AI answers42×2Content is citable but tied neither to the brand nor to the catalog
Technical audit62×1.5Healthy base, but half of impressions go to non-canonical addresses
Semantics and content plan55×1.51.47M of addressable search volume uncovered
Visibility in model answers48×11st by citations, 5th by brand mentions
E-E-A-T24×1The company entity does not exist in machine-readable form
Structured data38×14 critical errors, risk of manual actions
External placements60×1Clean profile, but absent from the key roundups
The score is dragged down by two sections with systemic markup defects — and both are fixed with template edits, not months of work. After the fixes, a realistic level is 75–80.

Checks summary

#CheckStatusComment / action
AI accessibility
1robots.txtPASSUser-agent: * / Allow: /, no restrictions
2Explicit rules for AI botsPASS*No rules — bots fall through to the residual *. Add explicit sections
3Live bot checksPASS14 UAs × 7 pages = 98 requests, all 200, content identical to the browser's
4Rendering without JSPASSRaw HTML has more text than the DOM; JSON-LD is present before JS
5SitemapPASS*All pages covered; 122 URLs in the sitemaps return a code ≠ 200
6Subdomain architectureFIXcriticalsupport is closed to everyone; api serves a third-party placeholder; 3 subdomains abandoned
7Knowledge base in the indexFIXcriticalsupport.evapolar.com → 403 for everyone, Googlebot included
8Common CrawlBlockedAPI unavailable (503, >30 attempts). Repeat the check
Technical audit
9Response codesPASS0 5xx errors, 2 internal 404s, 1 redirect chain
10Core Web Vitals (field)PASS*LCP 1,538 / CLS 0.00 / INP 173 — green zone. INP 216 on product pages is above threshold
11Core Web Vitals (lab)PASS*Performance 38–43: no headroom, 953 KB of unused JS
12Server speedPASSMedian response 0.21 s, no pages slower than 2 s
13CanonicalFIXcritical111 pages serve two conflicting rel=canonical
14Non-canonical URLsFIXcritical48% of impressions and 32% of clicks bypass the canonical addresses
15Parameter-based paginationFIXcritical?page=5000 returns 200 + self-canonical; the URL space is infinite
16Broken linksPASS*59 unique broken URLs, of which 3 are internal
17Duplicate title / H1FIXmedium218 duplicate titles; 17 pages with two H1s
18Orphan pagesPASS0 pages without inbound links
International configuration
19Locale coveragePASS*en / es / de linked correctly; German translations have no internal links
20hreflangPASS1,068 of 1,068 pages, 4 tags, no /fr/ leftovers
21Removed /fr/ localeFIXcriticalIndexed pages return 404; 16,665 impressions, one URL at position 1.1
22Locale mixingPASSNo language mixing found in internal links
Readiness for AI answers
23CTR against impressionsFIXhigh0.974% in positions 5–10 against an expected 2–4% on 4.75M impressions
24Content extractabilityPASS*Corpus average 88.8; 72 on money pages
25Positioning on product pagesFIXcritical"Without a window" is never mentioned on the key pages
26Blog-to-catalog connectionFIXcritical14 of 415 articles lead to a product; ≈39,900 visits/mo generate $0
27E-E-A-T and authorshipFIXcritical24/100; Organization broken on every page
28Content freshnessFIXhigh227 old pages are flagged as fresh; 191 are genuinely outdated
29CannibalizationFIXhigh43 duplicate pairs, 86 URLs — 16% of the indexable corpus
30Missed internal linkingFIXhigh27 confirmed opportunities; /collections/without-hose — 117 links against 1,774
31Structured data: reviewsFIXcriticalAmazon reviews marked up as first-party — risk of manual actions
32Structured data: coverageFIXhighBreadcrumbList — 0 pages, FAQPage — 0 despite visible FAQs
Visibility in models
33Domain citation ratePASS141 citations — 1st in the niche
34Brand mentionsFIXcritical5th place (73); 443 answers include competitors but not Evapolar
35Share of VoiceFIXhigh≈12.4%; 5% in ChatGPT against 20% in Google AI Overviews
36LLM traffic in GA4PASS*Best channel by ARPU, but the native report understates it by 44%
37Revenue attributionFIXcriticalSix months of data lost: 120K sessions with zero revenue
38Bot crawl activityPASS*Estimated from proxy signals; server logs were not provided
Semantics and links
39Semantic coverageFIXhigh2,615 keywords / 1.47M search volume outside coverage
40"Without a window" clusterFIXcritical413 queries / 330,910 search volume; the brand does not appear
41Backlink profilePASS954 domains, spam score 18 — clean profile
42Presence in roundupsFIXhighAbsent from bobvila and sylvane, where 4 competitors are present
43Donor inventory qualityPASS*Half of the link gap (504 domains) is link networks — do not replicate
Security (outside SEO)
44Subdomain controlFIXcriticalapi.evapolar.com — a subdomain takeover vector
45Public storage accessFIXhigh186 objects in S3 are anonymously accessible
All supporting data lives in the client audit spreadsheet (16 tabs); per-section tabs are linked from the relevant sections below.

2.AI crawler access

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.

Live bot requests
98
14 User-Agents × 7 page types, all code 200
Raw HTML text
24,591
characters against 18,044 in the rendered DOM
Knowledge base
403
support.evapolar.com is closed to everyone

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.

What is closed and needs action

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.

Findings
  1. Every AI crawler is allowed: 98 live requests across 14 User-Agents returned 200 with content identical to a browser's.
  2. No JavaScript dependency — the raw HTML of a product page carries more text (24,591 characters) than the rendered DOM (18,044), including price, specifications and ProductGroup markup with 15 variants.
  3. support.evapolar.com returns 403 to everyone, Googlebot included — the entire Zendesk knowledge base is outside both the index and the models.
  4. agents.md and llms.txt are Shopify defaults: they describe the platform, not Evapolar.
  5. Common Crawl presence is unverified: the API returned 503 on more than 30 attempts, so the check is Blocked, not zero.
What to do

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.

3.Technical audit

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.

Non-canonical URLs: 48% of impressions off target

StreamImpressionsClicksCTR
Canonical addresses6,174,930 (52.0%)61,292 (68.2%)0.996%
Non-canonical5,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.

The removed French locale returns 404

/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.

Infinite URL space

?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.

Canonical conflict

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.

A template bug that breaks two things at once

The theme template drops a slash when concatenating addresses. Two symptoms:

Fixed with a single edit. This is the first candidate for the roadmap.

Core Web Vitals

For real users (CrUX, 07/18–08/14/2026, mobile), everything is in the green:

Metricp75ThresholdVerdict
LCP1,538 ms≤ 2,500good
CLS0.00≤ 0.1good
INP173 ms≤ 200good

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.

Findings
  1. 48% of impressions (5,695,247) and 32% of clicks land on non-canonical addresses, converting at 0.507% CTR against 0.996% on the canonical ones.
  2. The legacy /blog/ redirect is only half rolled out — on 40 random articles, 26 return 301 and 14 return 404.
  3. The removed /fr/ locale still holds 16,665 impressions on 404s, including one URL at position 1.1 with 9,843 impressions.
  4. ?page=5000 returns 200 with a self-canonical on 342 tag listings — an infinite URL space that broke the full crawl twice.
  5. 111 pages serve two conflicting rel=canonical tags, so Google discards both signals.
  6. One dropped slash in the theme template breaks the Organization logo on all 1,068 pages and author.url on 207–215 articles.
  7. Field Core Web Vitals are green (LCP 1,538 ms, CLS 0.00, INP 173 ms); the single exception is INP 216 ms on product pages.
What to do

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

4.Readiness for AI answers

This is the core of the audit: why models read the site but do not recommend the brand.

The company does not exist in machine-readable form

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:

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.

E-E-A-T score
24 / 100
case studies 28, authorship 35, company entity 12, review profiles 20
Articles linking to catalog
14 / 415
3.4% of the blog carries a commercial path
Dead-end blog traffic
≈39,900 /mo
visits that generate $0

The proof of authority exists but is not published

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.

Amazon reviews marked up as first-party — a penalty risk

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.

The blog does not lead to the store

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.

Product pages say nothing about the main advantage

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.

Content freshness is fictitious

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.

Duplicates

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.

Important for whoever implements this: the copies form two parallel hreflang clusters. Setting a canonical between them without a synchronized hreflang fix will produce conflicting signals — what is needed is a 301, not a canonical.
Findings
  1. 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.
  2. E-E-A-T scores 24/100 — case studies 28, authorship 35, company entity 12, review profiles 20.
  3. A ready-made press kit (Wired, Forbes, TechCrunch, Mashable, PCMag, BuzzFeed, Business Insider, Engadget; three 2017 awards; 30,000 devices in 125 countries) exists in cloud storage, but /pages/press, /pages/awards, /pages/team and /pages/reviews all return 404.
  4. Amazon reviews are marked up as first-party on 15 product addresses — a direct violation of the Google Review snippet policy that the validator reports as 0 errors.
  5. Only 14 of 415 articles (3.4%) link to a product or collection in the body text; the dead-end articles collect ≈39,900 visits per month and generate $0.
  6. Product pages never mention "without a window", "ventless", "without hose", "exhaust" or "freon" — the wording lives only on collection pages with 117 inbound links against 1,774.
  7. Freshness signals are fictitious: 415 dated pages share 19 modification dates and 227 pages older than two years claim an update within 180 days.
  8. 43 pairs of fully identical text (86 addresses, 16% of the indexable corpus) are all indexable and self-referencing.
What to do

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

5.Visibility in model answers

The paradox: cited first, recommended last

MetricEvapolar's position
Domain citations (Brand Radar)141 — 1st place (Portacool 107, Sylvane 102, Dreo 73)
Brand mentions73 — 5th place (Arctic Air 119, Zero Breeze 105, Dreo 100, Hessaire 97)
Presence in ChatGPT answers5%
Presence in Google AI Overviews20%

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.

Traffic from models is the best channel in revenue terms

GA4 data for the clean window (April–August 2026):

MetricLLM trafficRegular organic
Sessions2,101 (0.84%)65,946
Share of revenue2.20%11.8%
ARPU$2.85$0.42
Conversion rate2.08%0.28%
ARPU vs organic
6.8×
$2.85 against $0.42 per session
Conversion vs organic
7.4×
ChatGPT 2.08% against 0.28%
Channel growth
5.9×
over six months

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).

Urgent: six months of revenue data lost

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.

Findings
  1. Evapolar is the most-cited domain in the niche — 141 citations against Portacool 107, Sylvane 102, Dreo 73.
  2. By brand mentions it is only 5th (73) behind Arctic Air 119, Zero Breeze 105, Dreo 100 and Hessaire 97; 443 answers name competitors but not Evapolar, on prompts with a combined volume of 1,496,500.
  3. The brand appears in 5% of ChatGPT answers against 20% in Google AI Overviews — a fourfold gap.
  4. LLM traffic is the strongest channel by revenue quality: 0.84% of sessions delivering 2.20% of revenue, ARPU $2.85 against $0.42 and a 2.08% conversion rate against 0.28%; the channel grew 5.9× in six months.
  5. E-commerce attribution failed from October 2025 through March 2026 — 120K sessions with zero transactions across every channel at once.
  6. GA4's native "AI Assistant" channel understates the channel by 44%: 1,431 sessions against 2,577 under the extended rule.
What to do

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.

6.Semantics & content plan

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.

Addressable keywords
2,615
1,472,950 total search volume
Have pages, rank 11–50
639
922,190 search volume
No visibility at all
1,976
550,760 search volume

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.

Findings
  1. 2,615 keywords worth 1,472,950 search volume sit outside coverage — 639 of them (922,190) on pages that already exist but rank 11–50.
  2. The content plan comes to 64 clusters: 41 new pages and 23 updates, with 42 clusters mattering specifically for visibility in models.
  3. In the US Evapolar ranks for 1,201 queries but holds only 100 top-10 positions, against Portacool's 261 on a smaller footprint.
  4. best portable air cooler — 40,500 searches/mo at difficulty 15 — sits at position 22.6 despite a dedicated page existing.
  5. Seasonality is severe: July delivers 10.6× the clicks of October.
What to do

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

7.External placements

The backlink profile is clean: 954 referring domains, spam score 18.

The main opportunity is not a link, it is a line in a roundup

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.

What not to buy

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.

Reddit data is estimated: access to the platform was blocked from the audit environment, and community sizes and self-promotion rules are drawn from known practice. Verify manually before acting.
Findings
  1. The backlink profile is clean — 954 referring domains at spam score 18.
  2. 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.
  3. The pages winning the missed prompts are review sites — Lowe's 583 citations, rtings 379, Consumer Reports 333 — not competitor sites.
  4. 504 of 1,000 donors are link networks and PBNs marked "do not replicate"; some pass the formal spam filter at score 27 against a threshold of 30, so the list was built manually from host patterns.
  5. Paid climate-equipment directories do not exist — the entire HVAC vertical monetizes through reviews and works by pitching only.
What to do

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

8.Roadmap

Sprint 0 — risks and single-operation fixesthis week
P1
1. Remove the markup presenting Amazon reviews as first-party
Scope: 1 template section → 15 URLs · Effect: removes the risk of a Google manual action · Owner: Client
P1
2. Delete the api.evapolar.com DNS record
Scope: 1 record · Effect: closes the subdomain takeover vector · Owner: Infrastructure
P1
3. Close anonymous S3 listing
Scope: 1 policy · Effect: 186 files stop being public · Owner: Infrastructure
P1
4. Fix the dropped slash in the template
Scope: 1 line · Effect: logo on 1,068 pages + author links on 207 articles · Owner: Client
P1
5. Remove the second rel=canonical
Scope: 1 template · Effect: 111 pages stop sending conflicting signals · Owner: Client
Items 1 and 4 are single-operation fixes that cover thousands of URLs. They come first regardless of formal effort estimates.
Sprint 1 — recovering lost traffic2–3 weeks
P1
6. Blanket pattern redirect /blog/*/blogs/blog/*, including /blog/es/ and the /amp/ suffix
Effect: recovers up to 35% of unserved legacy addresses; ~24K impressions from AMP alone
P1
7. Redirects from the removed /fr/ to English equivalents
Effect: recovers ~17K impressions, including the URL at position 1.1
P2
8. www → main domain
Effect: part of the 15% of impressions currently going astray
P1
9. New Organization markup with @id, a working logo and a complete sameAs
Effect: entity grounding for models across 1,068 pages
P2
10. Limit ?page= (404 beyond the real page count)
Effect: stops the crawl budget drain
Sprint 2 — turning citation into sales1 month
P1
11. A "Works without a window" block on every product page + moving the FAQ over from the collections
Effect: covers the cluster of 413 queries / 330,910 search volume
P1
12. Contextual links from 38 articles with ≥200 visits/mo to the relevant collections
Effect: 386 pages gain a commercial path; ≈39,900 visits/mo stop being a dead end
P2
13. /pages/press, /pages/awards and /pages/team built from the existing press kit
Effect: publishes the proof of authority that already exists
P2
14. FAQPage markup on 21 collections and BreadcrumbList
Effect: the most extractable format for models; coverage is currently 0
P2
15. Merge the 43 duplicate pairs via 301 (not canonical) with a synchronized hreflang fix
Effect: frees up 16% of the indexable corpus
P3
16. Fill agents.md with content about Evapolar
Effect: a direct channel to AI agents
Sprint 3 — growthquarter
P2
17. Pitch bobvila.com and Sylvane with a protocol of first-party measurements
Effect: entry into the roundups models cite
P2
18. Address the 1.99 rating on reviews.co.uk, build up Trustpilot
Effect: the largest independent profile is currently sharply negative
P2
19. 41 new pages per the content plan
Effect: 1.47M search volume; publish February–April
P3
20. Stop the bulk restamping of dates, update the 191 outdated pages
Effect: restores credibility of the freshness signal
P3
21. Cut unused JS on product templates
Effect: INP 216 → back within threshold, CWV headroom restored

A.Methodology & limitations

Appendix A. Methodology and limitations

Sources: 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.

What could not be checked

Caveats on the figures

Appendix B. Section reports

SectionFile
AI crawler accessibilityai-crawler-access-2026-08-16.md
Technical audittech-audit-2026-08-16.md
AI visibility monitoringai-visibility-monitoring-2026-08-16.md
On-page audit of money pagesonpage-audit-2026-08-16.md
Page-by-page corpus auditcorpus-audit-2026-08-16.md
E-E-A-Teeat-audit-2026-08-16.md
Structured dataschema-audit-2026-08-16.md
Semantic coveragesemantic-coverage-2026-08-16.md
External placementsexternal-placements-2026-08-16.md

Data: client spreadsheet — 16 tabs.

Appendix C. Ready-made assets

Prepared by ESA Digital · Aug 16, 2026 · Data sources: Screaming Frog crawl · GA4 Data API (property 272829378) · Search Console API · CrUX and PageSpeed Insights · DataForSEO LLM Mentions · Ahrefs Brand Radar · live checks across 14 User-Agents
This report contains client-confidential data.