Multi-Pillar Audit Report
A five-pillar review of experienceweeki.com — SEO, design, frontend, content, and AI-search readiness — covering all 52 pages on the site.
Executive Summary
The site looks polished and the brand voice is warm. The audit surfaces consistent, mechanical gaps across every modern SEO + performance pillar — most of which become straightforward fixes once identified.
Three highest-leverage fixes
- llms.txt is published with X-Robots-Tag: noindex — the AI-citation file ships with a response header that tells crawlers not to index it. The fix is a single platform-level header change. [Issue C-1]
- 45 of 52 pages have ZERO schema markup. Every property page, every experience page, every hub page is invisible to rich results, AI Overviews, and structured-data understanding. [Issue C-2]
- 88% of images are missing descriptive alt text. 812 of 923 images have alt="", 105 have no alt attribute. WCAG 1.1.1 failure plus a missed image-SEO funnel. [Issue C-4]
Focus Areas vs. Findings
Three areas have been the focus of recent work on the site: speed, SEO, and content quality. Each focus area is matched against what the audit data shows, so the gaps and the wins are visible side by side.
Critical Issues
Six items that materially block organic visibility, accessibility, or AI-search inclusion. Fix order is roughly top-down by impact.
llms.txt served with X-Robots-Tag: noindex header
The site publishes an llms.txt file (138 lines, 52 page entries) intending to guide AI crawlers — but the response includes the header `X-Robots-Tag: noindex`. LLM crawlers that obey this header (Perplexity, ChatGPT, Claude crawlers via robots-conformant fetchers) will NOT index it. The signal is undone before it leaves the server. Either the file is intentional (remove the noindex header) or it's an accident (delete the file).
Zero schema markup on 45 of 52 pages
No LocalBusiness, no VacationRental (LodgingBusiness), no Product, no Offer, no Review, no AggregateRating, no FAQPage, no BreadcrumbList, no Event (Swamp Fest blog!), no NewsArticle. Only the 7 blog posts have BlogPosting. The entire revenue-generating inventory (13 properties + 7 experiences + 5 hub pages) is invisible to rich-result eligibility, AI Overview eligibility, and Google's structured-data understanding.
9 pages with zero H1 (including homepage)
The homepage and 8 inner pages render with NO <h1> tag. Affected: HOME, Dolphins-Cove/jacuzzi, app/experiences, app/homes, plus 5 featured-experience subpages (airboat, gulf-tiki, head-spring, massage, round-boat). H1 is the single strongest on-page topical signal. Search engines fall back to <title> or sniffed text, which is a guess.
812 images with empty alt='', 105 missing alt entirely (88% alt failure rate)
Of 923 <img> tags across 52 pages, 812 have alt='' (decorative declaration when image is content), 105 have no alt attribute at all. The homepage logo has no alt. Hero images have no alt. Property gallery images have no alt. This is a sweeping accessibility violation (WCAG 1.1.1) AND a missed image-SEO opportunity (Google Images, image-pack inclusion).
Duplicate-content cluster: 3 URLs serving identical homepage
Pages `/`, `/home-old`, and `/vacation-rentals` all return the same <title>, same meta description, and likely the same body. Canonical tags point to themselves, not to the homepage. This is an internal duplicate cluster diluting authority and potentially confusing Google's canonical selection.
Robots.txt is empty of AI-crawler Allow rules
robots.txt contains only: `Sitemap: https://www.experienceweeki.com/sitemap.xml` and `User-agent: *` — no Allow, no Disallow, no AI-crawler-specific rules. Greg's standard requires explicit Allow for GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, Bingbot, Bytespider, anthropic-ai. Without these, AI crawler behavior is undefined; some default to refusing ambiguous sites.
High Priority
Thirteen items that won't tank the site individually but compound into significant CTR, ranking, and conversion loss.
15 titles >70 chars — will truncate in SERP
All 13 property-page titles plus 1 blog post plus About-Us follow the pattern '[Property] – [Feature1] & [Feature2] | Experience Weeki'. The 70-char SERP-cutoff truncates the brand off the end, so users see '...| Experien' or simply lose the 'Experience Weeki' qualifier. Worst offender: 93 chars on the manatees blog post.
25 titles' meta descriptions >160 chars — truncate in SERP
25 of 52 meta descriptions overflow the SERP description cutoff. Truncation kills the call-to-action in the back half, where 'Book direct and save' lives. Visible CTR loss.
9 pages missing meta description
Affected pages: about-our-manatees, app/experiences, app/homes, history-of-weeki-wachee-swamp-fest, how-to-pack-for-your-trip, intro-to-weeki-wachee, locals-guide, sms-consent, spz. Google generates a fallback from page text, which is unpredictable and often suboptimal.
3 duplicate meta descriptions sharing across 7 pages
`/contact` and `/schedule-a-call` share 'Phone, Email, WhatApp'. Two 'Own' pages share identical desc. Three homepage variants share same desc.
3 pages with multiple H1 elements
/own-nature-coast, /own-weeki-river, /property-management each render 2 H1s. Confuses semantic outline.
jQuery 3.7.0 + jquery-migrate render-blocking from CDN
Homepage <head> loads 3 render-blocking scripts: jQuery 3.7 (~85KB gzipped), jquery-migrate, and d-js-one-runtime-unified-desktop. jQuery in 2026 indicates the DM Direct platform stack hasn't modernized. These block first paint until downloaded + parsed.
Zero responsive-image markup (no srcset, no <picture>, no WebP/AVIF)
Every image on the site is loaded at full resolution as JPEG with no responsive variants. Mobile users on 3G eat full desktop-sized images. WebP would cut 25-35% off file size, AVIF 40-50%. lirp.cdn-website.com appears to support multiple sizes (filenames like '5-1d1dc87b-1920w.jpg', '5-1d1dc87b-222w.jpg') but they're not wired into srcset.
Zero lazy-loading on 923 images
No `loading='lazy'` attributes anywhere. Every image, including those well below the fold, downloads on page load.
Pure #000 backgrounds + multiple low-contrast text combinations
Impeccable flagged 1.1:1 contrast on text #f2f2f2 over #ffffff (effectively unreadable for most users), 3.5:1 on white over #619288 (below WCAG AA 4.5:1), and 2.6:1 on #999 over #f5f5f5 (below AA). Pure #000000 backgrounds appear in multiple sections — soften to a tinted near-black to match the warmer brand palette.
3 heading-skip violations on homepage
H2 'Find Your Perfect Weeki Wachee Stay' → H4 (no H3). Same for 'Why Book With Experience Weeki?' and 'Not Sure Which Stay Is Right for You?'. Screen-reader users hit broken outline. Three more skipped-heading instances on inner pages.
All blog posts and property pages lack author bylines
Zero E-E-A-T author signals across the entire content footprint. Google's helpful-content systems weight author authority heavily for YMYL-adjacent topics (wildlife guides, travel safety) and for hospitality. No 'Reviewed by', no 'Last updated', no author credentials.
All blog posts read as AI-generated or generic fluff
DeepSeek-V4-Pro audit verdict on 3 sampled blog posts: all READS_AI. Evidence: 'Here are some fun facts you probably didn't know about manatees', 'hidden paradise waiting to be discovered' (used 2x), 'born out of a desire to showcase the unique character and charm'. Zero first-hand markers across 3 posts. Manatee post cites no sources for legal claims and misspells 'Endagered'.
All property descriptions read as generic real-estate copy
DeepSeek-V4-Pro audit verdict on 4 sampled properties: 3 READS_AI, 1 READS_FLUFF. Repeated cliches: 'breathtaking 270-degree Gulf views', 'magical sunsets', 'hidden paradise', 'stylish, fun-filled retreat'. No host voice, no wildlife observations, no specific guest stories.
Medium Priority
Ten items worth scheduling but not urgent. Mostly content-depth, structural, and polish gaps.
6 titles under 30 chars (too thin)
'Homes' (5 chars), 'Experiences' (11), 'SMS Consent' (11), 'Locals-Guide' (12), 'Contact Us Weeki Wachee' (23), 'How to pack for your trip' (25). Wastes the strongest on-page signal.
26 of 52 pages under 500 words (thin content risk)
9 pages under 300 words: the 4 'app/*' shells, contact, water-scooter (101w), water-scooter-instructions (100w), Dolphins-Cove/jacuzzi (155w). The /app/ shells are likely client-rendered React/Foundation routes — should be noindex.
llms.txt structure incomplete vs Greg's standard
Has 2 sections (Pages, Blog Posts) and 138 lines. Missing: Title, > description blockquote, AI Citation Guidance, 125-char quote limit clause, Main Services section, Business Details, Service Areas. Compared to Greg's audit-seo-files.sh standard which requires 7+ sections.
Single-font typography (Poppins only)
Impeccable flagged: only Poppins is used site-wide. No display/body pairing, weak typographic hierarchy.
6 layout-thrash transitions detected
Impeccable flagged 6 `transition: height, padding, width, margin` and 1 `transition: width, height`. Animates layout properties instead of transform/opacity. Causes jank, especially on mobile.
Only 1 resource hint across 6 external origins
<head> has 1 preconnect/preload, but the page fetches from irp.cdn-website.com, lirp.cdn-website.com, static.cdn-website.com, multiscreensite.com, multiscreenstore.com, googletagmanager.com. Each first hit pays DNS + TCP + TLS sequentially.
No breadcrumb navigation on inner pages
Property detail pages, experience detail pages, and blog posts lack visible breadcrumbs. No BreadcrumbList schema. Hurts UX on mobile and rich-result eligibility.
Blog category is sparse (only ~7 posts)
For a niche local-travel site, 7 blog posts is thin. Topics with high local search demand (manatees, kayaking, springs, Tarpon Springs day trips, sunset cruises, alligator safety, hurricane prep) are unaddressed.
No FAQ section visible on property pages
Listings lack FAQ blocks ('Is the pool heated?', 'How far to the river?', 'Is there a grill?'). FAQ schema is one of the highest-ROI rich results for vacation rentals.
No internal-link CTAs from blog posts back to properties
Blog posts end with 'Older Post / Newer Post' navigation but no in-content links to the relevant property or experience pages. Wasted internal-link equity + wasted conversion path.
Low Priority
Cosmetic / hygiene items. Fix when convenient.
WhatsApp misspelled as 'WhatApp' in meta description
Both /contact and /schedule-a-call meta descs say 'Phone, Email, WhatApp'.
Misspelling 'Endagered' on manatee post
'Endagered Species Act' on /about-our-manatees blog. Authority signal weakened.
Inconsistent ampersand encoding in titles
15 titles contain '&' as literal text instead of '&'. Cosmetic but suggests templating bug.
Footer copyright year is 2026 (correct, but worth confirming auto-update)
Verify the year auto-updates via JS or template variable, not hardcoded.
No hreflang (single language)
OK for now — no Spanish version of the site. Flag if Spanish-speaking travel market becomes a target (Florida tourism, Cuban/Puerto Rican visitors).
GA4 only — no GTM or server-side tagging
GA4 (G-J8P5JVBXJV) is fine. No GTM container detected, no server-side tag, no consent banner. Florida has no state privacy law forcing consent, but EU visitors land on un-consented analytics.
SEO — Technical
Crawlability, indexability, robots, sitemap, canonical handling, and AI-crawler configuration.
Robots.txt
Present at /robots.txt but contains only a sitemap reference and a bare User-agent: * with no Allow/Disallow rules. No explicit AI-crawler permissions.
# Current # Sitemap is also available on /sitemap.xml Sitemap: https://www.experienceweeki.com/sitemap.xml User-agent: *
User-agent: *
Allow: /
Disallow: /app/main
# AI crawlers — explicit allow
User-agent: GPTBot
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: anthropic-ai
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: Applebot-Extended
Allow: /
User-agent: Bytespider
Allow: /
User-agent: CCBot
Allow: /
Sitemap: https://www.experienceweeki.com/sitemap.xml
Sitemap.xml
Lives at /sitemap.xml. Lists 52 URLs. Format is valid XML. Three URLs (/home-old, /vacation-rentals, /) point to duplicate content — see Issue C-5.
Missing image sitemap entries despite 923 images on the site. Adding image extension would let Google crawl image alt + caption metadata directly.
Canonicalization
Non-www → www 301 redirect is in place. All 52 pages declare a self-canonical, which is mostly correct — except the 3-URL homepage cluster where two duplicates self-canonicalize instead of pointing to /.
SEO — On-Page
Titles, meta descriptions, heading hierarchy, internal anchors.
Title length distribution
- 15 pages over 70 chars (truncate in SERP)
- 6 pages under 30 chars (too thin to compete)
- 2 sets of duplicate titles across 5 pages
- 0 pages with empty <title> (the recon agent's earlier flag — server-rendered HTML actually has them)
See all 15 over-length title offenders →
[93] /intro-to-weeki-wachee-an-overview-of-the-town-s-history... [77] /optimystical-vista [77] /paddlers-point [77] /sunfish-cove [76] /manatee-run-retreat [76] /red-elephant-inn [75] /teal-turtle [74] /coastal-cozy-cabana [74] /fun-flamingo [74] /overlook-retreat [73] /paddlers-cove [73] /salty-mangrove [73] /shelter-from-the-storm [71] /about [71] /nanas-river-house
Meta description quality
- 9 pages missing meta description entirely
- 25 pages with meta desc over 160 chars (truncate)
- 9 pages with meta desc under 120 chars (thin)
- 3 duplicate meta descriptions shared across 7 pages
H1 hygiene
9 pages have zero H1 (including the homepage). 3 pages have multiple H1s. 3 sections on the homepage skip from H2 directly to H4, creating a broken document outline.
See H1-less pages →
/ /Dolphins-Cove/jacuzzi /app/experiences /app/homes /featured-experiences/airboat-tours-and-fishing-charters /featured-experiences/gulf-tiki-cruises /featured-experiences/head-spring-drift-experience /featured-experiences/massage-therapy /featured-experiences/round-boat-rentals
SEO — Schema Markup
JSON-LD structured data is the single highest-leverage SEO surface in 2026 — it powers rich results, AI Overview eligibility, and structured-data understanding. The site is almost entirely absent from this layer.
45 of 52 pages have zero JSON-LD
Only the 7 blog posts emit BlogPosting schema. Every other page — homepage, all 13 property pages, all 7 experience pages, contact, about, ownership pages — has no structured data.
Missing schema types by page category
| Page Type | Missing Schema | Impact |
|---|---|---|
| Homepage | LocalBusiness, Organization, WebSite (with SearchAction), BreadcrumbList | Knowledge-panel eligibility, sitelinks, brand signal |
| Property pages (×13) | LodgingBusiness or VacationRental, with priceRange, amenityFeature, address, geo, image, aggregateRating | Rich snippets for vacation rentals, AI Overview eligibility, Google Travel inclusion |
| Experience pages (×7) | Product or Service or TouristAttraction, plus Offer with price + availability | Product rich results, price display in SERP |
| Blog (×7) | Author (Person) under BlogPosting, mainEntityOfPage, image | E-E-A-T author signal for Google's helpful-content systems |
| Swamp Fest blog | Event schema (location, startDate, endDate, organizer) | Event rich result + Google Events surface |
| Sitewide | BreadcrumbList on every inner page | Breadcrumb rich result + improved click attribution |
| Any page with Q&A | FAQPage on homepage "Not Sure Which Stay" section + property FAQs | FAQ rich result expansion in SERP |
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LodgingBusiness",
"name": "Dolphins Cove",
"description": "Pet-friendly waterfront home in Hernando Beach North...",
"image": ["https://www.experienceweeki.com/images/dolphins-cove-1.jpg"],
"address": {
"@type": "PostalAddress",
"addressLocality": "Hernando Beach",
"addressRegion": "FL",
"postalCode": "34607",
"addressCountry": "US"
},
"geo": { "@type": "GeoCoordinates", "latitude": 28.4881, "longitude": -82.6620 },
"telephone": "+1-352-585-8944",
"priceRange": "$$$",
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "Heated Pool", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Hot Tub", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Pet Friendly", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Deep Water Dock", "value": true }
],
"url": "https://www.experienceweeki.com/dolphins-cove"
}
</script>
SEO — Images
923 images across the site. Image quality and metadata fail on multiple axes simultaneously.
Every image is loaded eagerly, at full resolution, as JPEG
No loading="lazy", no srcset, no <picture>, no WebP, no AVIF. Mobile users on cellular networks download the entire image payload of every page before scrolling. The CDN (lirp.cdn-website.com) appears to support pre-built size variants (filenames include -222w.jpg, -1920w.jpg) but they are not wired into responsive image markup.
<!-- before --> <img src="https://lirp.cdn-website.com/.../5-1d1dc87b-1920w.jpg" alt=""> <!-- after --> <img src="https://lirp.cdn-website.com/.../5-1d1dc87b-1024w.jpg" srcset="https://lirp.cdn-website.com/.../5-1d1dc87b-480w.jpg 480w, https://lirp.cdn-website.com/.../5-1d1dc87b-1024w.jpg 1024w, https://lirp.cdn-website.com/.../5-1d1dc87b-1920w.jpg 1920w" sizes="(max-width: 600px) 100vw, (max-width: 1200px) 50vw, 1024px" loading="lazy" decoding="async" alt="Dolphins Cove backyard at sunset — heated pool, tiki hut, and deep-water dock">
Content & E-E-A-T (Humanizer Pillar)
DeepSeek V4 Pro audited 3 blog posts and 4 property descriptions for AI tells, citation gaps, and first-hand experience markers. Verdicts below.
All 3 sampled blog posts read as AI-generated
The homepage brand voice is warm and personal, but the blog posts themselves are missing the markers that carry that voice through. Zero bylines. Zero source citations for factual claims (manatee biology, federal protection laws, Swamp Fest history). Zero first-hand markers ("I", "we", named local residents, dated personal observations). This is a high-leverage rewrite opportunity — the brand is already established; the content just needs to inherit it.
See verbatim evidence per post →
/about-our-manatees: "Here are some fun facts you probably didn't know about manatees:" followed by a bullet list. Cites "Endagered Species Act" (misspelled). No source link to FWC or USFWS.
/best-kept-secrets: "hidden gems" (3x), "hidden paradise waiting to be discovered", "tranquil oasis beloved by locals but often overlooked". No dated visits, no parking notes, no wildlife observations.
/history-of-weeki-wachee-swamp-fest: "born out of a desire to showcase the unique character and charm", "its commitment to celebrating the unique spirit of Weeki Wachee remains unwavering". No interview quotes. No festival URL cited.
All 4 sampled property descriptions read as generic real-estate copy
The property descriptions trigger every common AI-content marker: "breathtaking 270-degree Gulf views", "magical sunsets", "stylish, fun-filled retreat", "hidden paradise". There is no host voice, no story of the property's name, no specific wildlife or sensory detail.
"We named it Dolphins Cove after the pod that plays in the canal every evening around 5pm — grab a drink on the dock and you'll see them. The deep-water slip fits boats up to 28ft."
Cross-cutting E-E-A-T gaps
- Zero author bylines across all 7 blog posts. No "Written by [Name]". No Author schema.
- No "Last updated" timestamps. The Pine Island Park entry on /best-kept-secrets says "Currently Closed" — no date. Will go stale silently.
- No citation links. Factual claims about manatee biology, federal laws, and festival history are unsourced.
- No /authors/ pages. No Person schema. No staff bios with credentials ("Weeki Wachee local since 2008", "Florida master naturalist").
- Cliche overuse: "hidden gem" (3x), "oasis" (2x), "breathtaking" (4x across audited pages), "magical" (3x). Google's helpful-content systems demote pages with high cliche density and low specificity.
AI Search / GEO Readiness
How well does the site surface in ChatGPT, Perplexity, Claude, Google AI Overviews, and Bing Copilot? Per Google's AI Optimization Guide, llms.txt is not a Google AI Overview ranking lever — but it is meaningful for non-Google LLM crawlers.
llms.txt is published but served with X-Robots-Tag: noindex
The site has invested in creating a 138-line /llms.txt file with 52 page entries, intending to guide AI crawlers. But the HTTP response carries:
server: nginx content-type: text/plain;charset=UTF-8 cache-control: no-cache, no-store, must-revalidate x-content-type-options: nosniff x-robots-tag: noindex
The noindex directive tells robots-conformant crawlers (including some LLM citation pipelines) not to index this resource. The signal is killed before it leaves the server. Likely a DM Direct platform default; needs an explicit exception.
llms.txt structure is incomplete vs. citation-readiness best practice
The current file has 2 sections (Pages, Blog Posts) and only lists URLs + page descriptions. Missing the elements that help LLMs pull a useful, on-brand summary:
- No # Title with the brand name
- No > description blockquote — the elevator pitch crawlers grab first
- No AI Citation Guidance section (recommended quote-length limits, attribution language)
- No Business Details section (phone, email, service areas, hours)
- No Main Services taxonomy
No passage-level citability in body content
AI search systems prefer compact, fact-dense paragraphs. The site's content is structured as long blog narratives + short property blurbs. There are few quotable, self-contained facts ("The Weeki Wachee River maintains a constant 72°F year-round" — not stated anywhere on the site).
Performance / Core Web Vitals
Performance is one of the stated focus areas for the site. The PageSpeed Insights public API quota was exhausted at audit time, so this section is derived from static HTML analysis and observed render-blocking patterns. A follow-up PSI run with an authenticated key is recommended for lab + CrUX field data.
Homepage loads jQuery 3.7.0 + jquery-migrate render-blocking
23 scripts in the <head>. 3 of them are render-blocking (no async/defer): jQuery 3.7, jquery-migrate, and the DM Direct runtime bundle. jQuery 3.7 gzipped is ~85KB; the DM Direct runtime is multiple times that. First-contentful-paint cannot begin until these download + parse.
Six layout-thrash CSS transitions detected
Impeccable audit flagged 6 instances of transition: height, padding, width, margin and 1 of transition: width, height. Animating these properties forces the browser to recalculate layout on every frame, causing jank — especially on mobile.
Only 1 resource hint across 6 external origins
The homepage references 6 distinct external CDN hosts (irp.cdn-website.com, lirp.cdn-website.com, static.cdn-website.com, multiscreensite.com, multiscreenstore.com, googletagmanager.com) but only one preconnect/preload hint is present in the <head>. Each first hit pays DNS + TCP + TLS sequentially.
<link rel="preconnect" href="https://lirp.cdn-website.com" crossorigin> <link rel="preconnect" href="https://irp.cdn-website.com" crossorigin> <link rel="preconnect" href="https://static.cdn-website.com" crossorigin> <link rel="dns-prefetch" href="https://www.googletagmanager.com">
Total HTML payload across the site
52 pages × 107KB average = 5.5MB HTML payload sitewide. The average page weighs in at 107KB of HTML alone, before CSS, JS, fonts, or images. For a content-light vacation rental site, this is heavy — DM Direct injects 48KB of inline CSS + 26KB of inline JS into every page.
Design / Taste / Frontend
Impeccable + chrome-devtools rendering audit. The site looks professional at a glance but breaks down on contrast, type, and motion.
Color contrast falls below WCAG AA in multiple places
Impeccable detected the following contrast ratios:
- 1.1:1 — text #f2f2f2 on #ffffff (effectively invisible)
- 3.5:1 — white text on #619288 (need 4.5:1 for body text)
- 2.6:1 — #999999 on #f5f5f5
The 1.1:1 is the most serious — that text is unreadable to virtually all users. Likely a section background/text-color swap bug.
Single-font typography (Poppins only)
The site uses Poppins for everything — headings, body, captions, navigation. No display/body pairing, no typographic hierarchy beyond size and weight.
Pure #000000 backgrounds
Pure black appears as a section background. Reads harsh and unbranded against the otherwise warm teal/sand palette. Soften to oklch(12% 0.01 200) for a tinted near-black.
Three heading-skip violations on homepage
Three sections render H2 directly followed by H4 (no H3). Screen-reader users hit a broken outline. Promote the H4s to H3 — purely a tag swap.
Quick Wins (Ranked by Effort)
These ten items can ship in under a day total. Highest leverage per hour.
| Effort | Action |
|---|---|
| 15 min | Remove `X-Robots-Tag: noindex` header from llms.txt response (DreamHost support ticket). |
| 30 min | Fix misspelling 'Endagered' → 'Endangered' on /about-our-manatees and 'WhatApp' → 'WhatsApp' in 2 meta descriptions. |
| 30 min | Add 301 redirects: /home-old → /, /vacation-rentals → /. |
| 45 min | Add explicit AI-crawler Allow rules to robots.txt (9 bots). |
| 1 hr | Add semantic <h1> to homepage + 8 H1-less inner pages. |
| 2 hr | Tighten 15 over-length titles to ≤60 chars. |
| 2 hr | Write 9 missing meta descriptions + rewrite the 25 over-length ones. |
| 3 hr | Generate JSON-LD LodgingBusiness for all 13 properties (template + per-property fields). |
| 4 hr | Sweep all 923 <img> tags to add descriptive alt text (start with homepage hero + each property hero). |
| 4 hr | Add loading='lazy' to every below-the-fold image (mechanical pass via DM Direct template edits). |
30 / 60 / 90 Day Roadmap
A sequenced plan if the audit results are taken seriously. The 90-day milestone is the meaningful one — a platform migration off DM Direct unlocks every category that the current stack caps.
30 Days quick-wins
- All quick-wins shipped (above 10 items).
- JSON-LD coverage: LodgingBusiness, LocalBusiness, BreadcrumbList, FAQPage, Event (Swamp Fest).
- Robots.txt + llms.txt aligned with Greg's standard.
- Alt-text sweep complete across 923 images.
- Lazy-loading + srcset across all property gallery images using existing CDN size variants.
60 Days content + structure
- Rewrite 3 existing blog posts with bylines, citations, first-hand voice.
- Add Host's Note section to all 13 property pages.
- Add 5-10 FAQ items per property page with FAQPage schema.
- Publish 6 new blog posts on high-intent topics (manatee swim safety, sunset cruise comparison, Tarpon Springs day trip, kayaking the headspring, fishing the flats, hurricane season tips).
- Add visible breadcrumbs across the site.
90 Days platform shift
- Migrate off DM Direct to Astro SSR or similar (jquery removal, modern image pipeline, no platform-imposed render-blocking).
- Author pages per real contributor with credentials and photo.
- Internal-link audit: every blog post links to ≥2 relevant inventory pages.
- Image SERP push: descriptive alts + image-sitemap inclusion.
- Local citation cleanup + GBP + Bing Places (if not already done).
What's Already Working
A fair audit names the wins, not just the gaps. Ten things the site is doing right today.
Sitemap.xml present at /sitemap.xml and referenced from robots.txt (52 URLs).
All 52 pages declare canonical (self-canonical mostly, which is correct except for the duplicate cluster).
OG title + OG image present on 48 of 52 pages.
GA4 tracking with custom events (G-J8P5JVBXJV) is wired correctly.
llms.txt exists with all 52 page entries (intent is right; header issue is the blocker — see c1).
Non-www → www 301 redirect is in place (correct canonicalization at the host level).
Mobile viewport meta is set with `initial-scale=1, maximum-scale=5` (correct).
Property descriptions, despite genericness, are at least unique per listing (not templated word-for-word).
Content tone is friendly and family-owned (good brand foundation to build on — just needs more specificity).
BlogPosting schema on all 7 blog posts (rare W for the platform).
Methodology
How this audit was conducted, for reproducibility.
Tools used
- Crawl: Full sitemap parse + parallel curl of all 52 URLs. Python static analyzer for titles, meta, H1/H2 hierarchy, canonical, JSON-LD, OG tags, alt text, image format, lazy-loading, word count, HTML weight.
- Render audit: chrome-devtools MCP — accessibility tree, DOM, screenshots, console messages (homepage + 5 inner pages).
- Design / taste: Impeccable CLI (15 anti-patterns surfaced). Greg's audit-design.sh wrapper.
- SEO files: Greg's audit-seo-files.sh for robots.txt + llms.txt + AI-crawler rule validation.
- Content E-E-A-T: DeepSeek V4 Pro 1.6T (frontier reasoning) audited 3 blog posts + 4 property descriptions for AI tells, citation gaps, author authority, first-hand markers.
- Performance: Static HTML analysis (PSI public API quota was exhausted at audit time — a follow-up Lighthouse run with an authenticated key is recommended).
What this audit does not cover
- Backlink profile (no data pulled — recommend Moz/Ahrefs/DataForSEO follow-up).
- Google Search Console traffic + impression data (no API access for this domain).
- Live Core Web Vitals field data via CrUX (no PSI quota available at audit time).
- Booking-funnel conversion analysis (would require analytics access).
- Competitor benchmarking (recommended as a separate engagement).