Full SEO Audit iwantairtoday.com April 22, 2026

A complete field report for Air Today Heating & Cooling.

Ten-part diagnostic of technical health, content quality, schema, performance, AI search readiness, and backlinks for a forty-year-old local HVAC contractor serving Greenville, SC and the Upstate.

00 — Executive Summary
Overall SEO Health
52/ 100

Moderate health with a handful of high-impact, low-effort fixes available. Composite score across seven weighted categories.

Domain Rating
12
Ahrefs · competitors avg 60–90
Organic Traffic
369/mo
~$2,097 monthly value
Organic Keywords
119
12 ranking in top 3
Backlinks
938
484 referring domains
Business Type
Local HVAC Contractor (NAICS 238220)
Pages Indexed
~136 (71 blog posts + 64 pages + 1 KML)
CMS
WordPress with Astra theme and Rank Math SEO
Hosting
Cloudflare CDN on Cloudways

Top 5 Critical Issues

  1. 01
    Extremely low Domain Rating (12). Competitors average DR 60–90 — a massive authority gap that will bottleneck rankings on competitive keywords.
  2. 02
    Missing security headers. No HSTS, CSP, X-Frame-Options, or X-Content-Type-Options — both a trust and a technical SEO signal.
  3. 03
    Location-page NAP inconsistency. Anderson, Simpsonville, and other city pages show the Greenville address in schema without clarification that the business merely serves those cities.
  4. 04
    No FAQ schema on any page. Featured snippet, People Also Ask, and AI Overview opportunities are being left on the table.
  5. 05
    Thin content on location pages. Templated ~800-word pages with minimal unique local substance — a cannibalization and quality risk.

Top 5 Quick Wins

  1. 01
    Add FAQ sections with FAQPage schema on top service and blog pages.
  2. 02
    Add missing security headers via Cloudflare Transform Rules — a one-hour fix.
  3. 03
    Create llms.txt to establish AI search visibility.
  4. 04
    Add AggregateRating schema with existing review data for star treatments in SERPs.
  5. 05
    Consolidate duplicate Greer location pages (three URLs targeting the same city).
01 — Scoring Breakdown

Weighted composite

Technical SEO
25%
62 / 100
Content Quality
25%
62 / 100
On-Page SEO
20%
58 / 100
Schema & Structured Data
10%
50 / 100
Performance (CWV)
10%
72 / 100
Images
5%
35 / 100
AI Search Readiness (GEO)
5%
41 / 100

Specialist sub-scores

Specialist AreaScore
E-E-A-T Composite65 / 100
AI Citation Readiness48 / 100
GEO Readiness41 / 100
Thin Content RiskModerate–High
Cannibalization RiskHigh
02 — Technical SEO

Technical foundation

Score: 62 / 100. Strong hosting and redirect hygiene; missing security headers and verbose bot-blocking in robots.txt.

Crawlability

CheckStatusNotes
robots.txtWarningOverly verbose — blocks 100+ obsolete bots. Simplify.
SitemapPassValid sitemap index with 3 sub-sitemaps, lastmod dates present.
Sitemap in robots.txtPassProperly declared.
Crawl budgetWarning136 URLs is fine, but duplicate location pages waste budget.
XML sitemap KML fileWarninglocal-sitemap.xml points to a KML file — not standard.

Indexability

CheckStatusNotes
Canonical tagsWarningNot explicitly detected on sampled pages — verify implementation.
HTTP → HTTPS redirectPass301 redirect working.
www → non-www redirectPass301 redirect working.
Trailing slash consistencyPassEnforced via 301 (/about-us → /about-us/).
noindex directivesPassNone detected on content pages.

Security

CheckStatusNotes
HTTPSPassValid SSL via Cloudflare.
HTTP/2PassEnabled.
HSTS headerFailMissing — add Strict-Transport-Security.
Content-Security-PolicyFailMissing.
X-Frame-OptionsFailMissing — clickjacking risk.
X-Content-Type-OptionsFailMissing — MIME sniffing risk.
Referrer-PolicyFailMissing.
Permissions-PolicyPartialOnly covers private-state-token.
security.txtFail404 — not implemented.

URL Structure

CheckStatusNotes
Clean URLsPassDescriptive, no parameters.
Consistent hierarchyWarningInconsistent: /services/heating/furnace-repair/ vs /piedmont-ac-repair/ vs /anderson-hvac/ac-repair/
DepthPassMax 4 levels.

Additional

CheckStatusNotes
llms.txtFail404 — not implemented.
IndexNowUnknownCannot verify without plugin check.
wp-json exposureWarningLink header exposes /wp-json/ endpoint.
03 — Content Quality

Content & E-E-A-T

Score: 62 / 100. Forty years in business is a real asset — but it isn’t showing up in the content, the author infrastructure, or the trust signals that Google Quality Raters look for.

E-E-A-T Composite (65 / 100)

Experience

14/ 20

40+ years operating — exceptional. Missing: first-hand project documentation, technician voice in blog content, before/after case studies.

Expertise

16/ 25

71 blog posts show breadth. Missing: author bio pages with verifiable credentials (NATE, EPA 608) and outbound citations to Energy.gov, EPA, ASHRAE.

Authoritativeness

15/ 25

DR 12 vs local competitors at DR 60–70. Directory-heavy backlink profile; no Greenville media, no original data or research.

Trustworthiness

20/ 30

100% satisfaction guarantee prominent. SC Contractor’s License number is not displayed — required YMYL-adjacent trust signal.

Content depth

Page TypeAvg Word CountAssessment
Homepage~1,500+Adequate for local HVAC.
Service pages500–800Thin Needs expansion to 1,500+.
Blog posts1,000–2,000Good depth on newer posts.
Location pages800–1,200Thin Templated; needs unique local content.
About page600–800Thin Needs team bios and history.

Duplicate & cannibalization risks

High risk — location pages

  • /greer-sc-hvac/ vs /greer-hvac-company/ vs /hvac-installation-and-repair-in-greer-sc/ — three pages targeting Greer.
  • /simpsonville-sc-hvac/ vs /hvac-installation-and-repair-in-simpsonville-sc/ vs /simpsonville-sc/ — three pages targeting Simpsonville.
  • /anderson-hvac/ vs /anderson-sc/ — two pages targeting Anderson.
  • /easley-hvac/ vs /easley-sc/ — two pages targeting Easley.
  • /piedmont-sc-hvac-company/ vs /piedmont-sc/ — two pages targeting Piedmont.

Medium risk — blog topics

  • Three spring-allergy-in-Greenville posts.
  • Multiple HVAC fan posts overlapping.
  • At least four “reduce energy / utility bills” posts.

Readability

Blog posts use accessible language appropriate for a homeowner audience, with good subheading use on newer posts. Older 2022–2023 posts are shorter and less structured. Service pages would benefit from bullets and comparison tables for scannability.

04 — On-Page SEO

On-page fundamentals

Score: 58 / 100. Title tags are mostly good; the homepage is missing its meta description; headings often duplicate the title tag.

Title tags

PageTitleIssue
HomepageGreenville, SC HVAC Repair & Installation | Air Today Heating & CoolingGood Keyword + brand, 68 chars
AC RepairAC Repair in Greenville, SC | Air Today Heating & CoolingGood 56 chars
Blog postHow to Choose the Right HVAC System for Your Home? | Air Today…Warn Unnecessary “?” in title
AndersonProfessional HVAC Services For Anderson SCFail Missing brand name
AboutAbout Air Today Heating & Cooling | HVAC Experts in Greenville, SCGood

Meta descriptions

PageStatusNotes
HomepageMissingNot detected — critical omission.
AC RepairPartialPresent in schema — verify meta tag.
Blog postPresent155 chars, includes CTA.
AndersonPresentDescribes services.
AboutPresentGood.

Heading structure

  • H1 tags present on all sampled pages.
  • H2 / H3 hierarchy hard to verify due to CSS-heavy rendering.
  • Heading text often duplicates the title tag — wasted opportunity.

Internal linking

  • Breadcrumb navigation on service and location pages.
  • Blog posts lack cross-links to service pages.
  • Location pages don’t interlink with each other or related services.
  • No visible internal linking strategy between blog content and service pages — a missed conversion path.
05 — Schema & Structured Data

Structured data

Score: 50 / 100. Core schema present; FAQPage, HowTo, and AggregateRating are all missing — the fastest available path to rich results.

Current implementation

Schema TypeWhereStatus
HVACBusiness + OrganizationAll pagesPass
LocalBusiness (NAP)All pagesWarning Same Greenville address on every location page
ArticleBlog postsPass Includes author + dates
BreadcrumbListService + location pagesPass
WebPageAll pagesPass

Missing schema (opportunities)

SchemaWhere to addImpact
FAQPageService pages, blog postsHigh FAQ rich results
HowToTutorial blog postsHigh Step-by-step rich results
ServiceEach service pageMedium Defines offerings
AggregateRatingHomepage, service pagesHigh Star ratings in SERPs
ReviewService / location pagesMedium Social proof
OfferService pages with pricingMedium Price display
VideoObjectIf videos existLow

Validation issues

  • NAP inconsistency: schema on Anderson / Simpsonville / Piedmont pages shows the Greenville address.
  • Missing areaServed property on location pages — each should specify its target city.
  • priceRange: "$$$" on About page may deter price-sensitive customers.
  • Author schema on blog posts lacks url to an author bio page (page doesn’t exist yet).
06 — Performance / Core Web Vitals

Performance

Score: 72 / 100. TTFB is excellent — Cloudflare + Cloudways caching is doing its job. The real weight is Astra’s inline CSS bloating HTML to 575 KB.

Server performance (via curl)

MetricHomepageService PageBlog Post
DNS1.7ms1.7ms2.5ms
Connect24ms22ms22ms
TLS54ms50ms51ms
TTFB184ms105ms129ms
Total download254ms164ms183ms
HTML size575KB434KB345KB

TTFB: excellent — all pages under 200ms.

Page-size concerns

IssueSeverityDetail
Homepage HTML: 575 KBHighExtremely large for HTML — 50K+ chars of inline CSS.
Inline CSS bloatHighAstra inlines massive CSS — should be extracted to external files.
HTML across pagesMedium345–575 KB range is 3–5x larger than optimal.

Caching

CheckStatus
Cloudflare CDNPass   cf-cache-status: HIT
Cloudways cachePass   cache-provider header present
Browser cachingUnknown   Check Cache-Control on assets

Known issues (WordPress / Astra)

  • Render-blocking CSS likely significant due to inline CSS volume.
  • WordPress typically loads jQuery + multiple plugin scripts.
  • Astra has decent performance defaults, but inline CSS can hurt FCP / LCP.
  • No evidence of critical CSS extraction or CSS purging.
07 — Images

Images

Score: 35 / 100. Weakest category. Alt text is generic or unverifiable; WebP / responsive srcsets can’t be confirmed from the crawl.
IssueSeverityDetails
Limited alt text diversityHighAlt text detected on some images; many not verifiable.
Logo alt textPassDescriptive: “Air Today Heating & Cooling - Greenville SC HVAC Contractors”.
Image optimizationUnknownWebP / AVIF, lazy loading, srcset not verifiable from crawl.
Image file namesPassDescriptive (e.g., air-today-heating-and-cooling-hvac-technician…).
Blog featured imagePartial“hvac system” alt text is too generic.

Recommendations

  • Audit every image for descriptive, keyword-relevant alt text.
  • Verify WebP format usage (Cloudflare can auto-convert via Polish).
  • Implement responsive images with srcset for mobile.
  • Add lazy loading to below-fold images.
  • Compress hero and feature images — target under 100 KB each.
08 — AI Search Readiness / GEO

AI search & generative engines

Score: 41 / 100. Crawlers aren’t blocked, but there’s no llms.txt, no FAQ structure, and passages are too short to be extracted cleanly by LLM-driven search.

AI crawler accessibility

GPTBot · Allowed ClaudeBot · Allowed PerplexityBot · Allowed Googlebot-Extended · Allowed Bytespider · Allowed

AI crawlers are not blocked — content is accessible for AI training and search.

llms.txt compliance

CheckStatus
/llms.txtFail 404
/.well-known/llms.txtFail 404

Citability (48 / 100)

FactorScoreNotes
Structured Q&A content1 / 5No FAQ sections detected on any sampled page.
Definition-style answers1 / 5Content is narrative, not structured for extraction.
Data / statistics2 / 5“40+ years” cited; no original data, surveys, or cost data.
Clear attribution3 / 5Business name and expertise are clear.
Passage-level structure2 / 5Headings used but content not structured for AI extraction.
AI systems prefer passages in the 134–167 word range for citation. Current passages are 1–2 sentences — far below optimal. The homepage brand passage is only ~30 words.

Platform-specific readiness

PlatformScoreKey gap
Google AI Overviews45 / 100No FAQ schema; thin service pages; no AggregateRating.
ChatGPT (web search)35 / 100No llms.txt; passages too short; no cited statistics.
Perplexity30 / 100No self-contained answer blocks; no source-cited data.
Bing Copilot40 / 100Limited content depth; Elementor markup degrades extraction.

What’s needed for AI visibility

  1. llms.txt — define the business, services, and key pages.
  2. FAQ sections — 5–8 FAQs per service page, answers in the 134–167 word range, wrapped in FAQPage schema.
  3. Answer-first structure — each section opens with a direct 40–60 word answer before elaborating.
  4. Original data — local pricing, repair timelines, seasonal trends.
  5. Structured lists — numbered steps, comparison tables, bullets.
  6. Citation-worthy claims — replace “40+ years” with founding year, job count, review count, technician count.
  7. Off-site brand presence — no Wikipedia entity and unknown Reddit presence; both correlate with AI citation frequency.
10 — Organic Keyword Performance

Keywords & traffic

57% of all organic traffic goes to a single page. The dependency is real — and it’s the clearest case for broadening the content base.

Top keywords by traffic

KeywordPositionVolumeTrafficURL
air today heating & cooling210043/
air conditioner repair service101,10033/ac-repair-simpsonville-sc/
ac service repair420024/ac-repair-simpsonville-sc/
air today heating and cooling26023/
airconditioning repair near me615015/ac-repair-simpsonville-sc/
ac repair and installation935013/ac-repair-simpsonville-sc/
running hvac fan continuously510010/blog/should-your-hvac-furnace-fan-run-continuously/
cheap ac repair near me92509/ac-repair-simpsonville-sc/

Traffic concentration risk

  • 57% of all organic traffic goes to a single page: /ac-repair-simpsonville-sc/.
  • Only 2 pages drive meaningful traffic (>40 visits/month).
  • 71 blog posts collectively drive minimal traffic.
  • Branded keywords (“air today heating & cooling”) account for ~18% of traffic.

SERP feature opportunities

FeatureCurrent presenceOpportunity
Local PackAppears for repair queriesOptimize GMB, add reviews.
AI Overview“running hvac fan continuously” triggers oneAdd FAQ schema for more coverage.
People Also AskAppears on repair SERPsCreate content targeting PAA questions.
SitelinksBranded queries onlyImprove site structure.
11 — Sitemap Analysis

Sitemap

SitemapURLsLast modified
post-sitemap.xml71Apr 20, 2026
page-sitemap.xml64Apr 22, 2026
local-sitemap.xml1 (KML)Mar 24, 2026
Total136

Issues

  • Missing changefreq / priority — optional but helpful for crawl prioritization.
  • KML in sitemap — unusual; search engines may not process this.
  • Duplicate location pages not consolidated — multiple URLs for the same cities.
  • All 71 blog posts have lastmod dates, indicating active content management (positive).
12 — Appendix

Page inventory

Service pages (14)

Core services well-covered: AC repair, AC installation, heating, furnace repair, furnace installation (gas & oil), heat pumps, preventative maintenance, ductwork, mini-splits, indoor air quality, new construction HVAC.

Location pages (~30)

Cities covered: Greenville, Simpsonville, Anderson, Greer, Easley, Piedmont, Seneca, Clemson, Mauldin, Taylors, Pickens.

Issue: multiple pages per city with overlapping targets.

Blog posts (71)

Active blog with consistent publishing (2022–2026). Topics cover repair troubleshooting (AC not cooling, furnace issues, strange smells), buying guides (HVAC selection, heat pumps, mini-splits), maintenance (filter changes, seasonal prep), cost / savings (energy tips, utility bills), and local content (Greenville-specific guides, property manager tips).