Site Audit Log rivieraalexandria.com

Site Audit · 10 September 2026

rivieraalexandria.com — performance, SEO & tracking

The site is served fast and indexed cleanly. What holds it back is weight — 41 MB of unoptimised photography — and a handful of signal errors that quietly undercut the SEO work already invested in it.

Webflow · Cloudflare 35 pages surveyed Baseline audit
162msMedian time to first byte
24.6MBImages on /gallery
0Images served as WebP or AVIF
49%Images with no alt text
35Canonicals on the wrong host
2Google Tag Manager containers

01 · What is already working

Worth stating plainly, because it narrows where the effort should go: the hosting and crawl layers are in good shape.

HealthyDelivery is fast and correctly cached

All 35 pages return 200. Time to first byte 106–224 ms, total transfer 130–265 ms, served from Cloudflare with cf-cache-status: HIT. HTTP/2 and HTTP/3 both offered, HSTS set with includeSubDomains, and 103 Early Hints preconnect the CDN and font hosts before the HTML lands.

Healthyrobots.txt is unusually well considered

Traditional crawlers allowed, AI assistants explicitly admitted (GPTBot, Meta, Amazonbot, DuckAssistBot, MistralAI, YouBot, Applebot-Extended), Bytespider blocked, and utility pages kept out of the index. Sitemap declared, 35 URLs, all resolving.

HealthyStructured data on 21 pages

LocalBusiness on the homepage, FAQPage on /il-faqs, NewsArticle on events, plus entity markup linking to Wikidata, Wikipedia and Crunchbase.

02 · Page weight

Server response is not the bottleneck; photography is. Full-size images each page requests by default, measured from actual content-length.

PageMBImages
/gallery24.622
/services-amenities4.616
/why-the-riviera4.113
/independent-living3.515
/dining3.120
/wellness2.011
/lifestyle1.316
/ (home)0.614
/il-floor-plans0.619
Critical41.2 MB of full-size images across the site

79 unique full-size images: 8 exceed 1 MB, 22 exceed 500 KB. Heaviest is riviera-terrace-outdoor-garden.jpg at 3.8 MB, then riviera-alexandria-hero.png at 3.6 MB — a photograph saved as PNG, a format that cannot compress photographic detail.

Fix — re-export the 22 images over 500 KB at 75–82% JPEG quality and let Webflow generate WebP. Expect 85–95% off each.

CriticalNot a single image is served as WebP or AVIF

Sitewide: 620 JPEG, 447 PNG, 172 SVG — zero modern formats. Webflow converts on upload and serves WebP to browsers that accept it, so this is a setting and a re-upload. The 447 PNGs are the expensive half.

Fix — enable WebP in Webflow site settings, then re-upload heavy PNGs as JPEG originals.

WarningEvery image is lazy-loaded, including above the fold

All 23 homepage images carry loading="lazy". For the first visible image that is harmful: the browser defers the very request that determines Largest Contentful Paint, and no <link rel="preload"> compensates.

Fix — set the first in-view image on each template to eager loading, and preload it.

WarningImages ship without dimensions, mostly without srcset

On the homepage 1 of 23 images declares width and height, and 5 of 23 have a srcset. Missing dimensions cause layout shift as photographs arrive; missing srcset means phones download desktop-sized files.

WarningjQuery downloaded twice, in two versions

jQuery 3.7.1 from code.jquery.com and jQuery 3.5.1 from Webflow's CDN — 61 KB compressed for a library needed once. Two versions on one page is a real source of intermittent script bugs.

Fix — remove the manually added code.jquery.com tag.

MinorFonts load through a deprecated loader, in 18 variants

webfont.js requests Merriweather (8 cuts), Mulish (5) and Prompt (5). The loader is an extra blocking round trip before any font request begins.

03 · Signals that contradict each other

Each tells Google something the rest of the site denies. Cheap to fix; they undercut work already paid for.

CriticalAll 35 canonicals point at a host that redirects away

The site serves at the apex and www 301-redirects to it. The sitemap uses the apex. But every page declares the www version canonical — naming as authoritative a URL that immediately bounces. The JSON-LD carries the same www URLs.

served    200  https://rivieraalexandria.com/about
canonical      https://www.rivieraalexandria.com/about   -> 301 -> apex
sitemap        https://rivieraalexandria.com/about

Fix — point canonical and JSON-LD at the apex, or make www the served host. Either is fine; they must agree.

CriticalStructured data on /about is invalid JSON

Two JSON objects concatenated inside one application/ld+json block — the parser fails at line 385 with Extra data. Google discards the whole block, so every entity claim on that page is silently ignored.

Fix — split into two script tags, or wrap both objects in a single array.

Warning25 of 35 pages have no og:image

Only the homepage, /community and one news post define a share image. Everything else — including /contact, /book-an-appointment and every event page — renders as a bare text link when shared.

Fix — set a site-wide default share image, then override per page where it matters.

WarningThe homepage share image is a 3.6 MB PNG from another property

og:image points at TRIL_HomeHERO_1920x930.png, hosted in a different Webflow site's asset bucket — the file name suggests Trillium. At 3.6 MB it is roughly thirty times a sensible share image, and slower scrapers give up before fetching it.

Fix — export a 1200×630 JPEG of this property under 200 KB, hosted on this site.

04 · On-page SEO

CheckPagesDetail
Missing meta description2/search, /why-the-riviera
Description under 70 chars11Mostly event pages — one is 31 chars
Description over 160 chars6Truncated in results
Title over 60 chars8One news title runs to 81
More than one H115Splits topical focus
No H1 at all1/community
Under 300 words18Thin for competitive local terms
Images missing alt text271of 550 — 49%

The pages deserving attention are /why-the-riviera — no description at all, despite being a primary conversion page — and the 18 thin pages. /gallery at 123 words is a page of photographs with almost nothing for a crawler to read, and half its images have no alt text either. For a community selling a physical place, image search is a real acquisition channel.

05 · Tracking and paid media

Twelve third-party scripts run on the homepage. Two things need attention before spend is scaled.

WarningTwo Google Tag Manager containers on the same page

GTM-KDTVMHFJ and GTM-N53TL3JL both load, alongside GA4 G-BKB6PKLLYX. Two containers routinely means one event firing twice — inflated conversion counts, inflated bidding signals, and a cost-per-lead that reads better than reality.

Fix — establish which container is authoritative, migrate unique tags into it, remove the other.

WarningNo Google Ads or Meta conversion tag in the page source

No AW- conversion ID and no fbq appear in the HTML. They may be injected through GTM at runtime, which this survey could not execute — so treat this as a question rather than a finding. Worth answering: unverified conversion tracking is the most common cause of paid budget optimised against nothing.

Fix — confirm in Google Ads that conversions recorded in the last 7 days, and run Tag Assistant on /contact.

CriticalA production script loads from a personal GitHub Pages site

The date picker comes from fengyuanchen.github.io/datepicker/js/datepicker.js — an individual developer's demo hosting, not a CDN with an uptime commitment. If that repository is renamed, deleted or taken over, the booking form's date field breaks or executes someone else's JavaScript on a page collecting names and phone numbers.

Fix — serve it from jsDelivr with a pinned version, or upload the file to Webflow assets.

The full stack on the homepage

  • Analytics — GA4, two GTM containers, Microsoft Clarity
  • Attribution — TracedMethod SDK, capturing first-touch campaign and referrer into form submissions
  • Call tracking — CallRail number swap
  • Lead capture — four Roobrik quiz widgets (senior living, downsize, memory care, affordability)
  • SEO tooling — SearchAtlas dynamic optimisation, injected via a base64 data: URI
  • Unidentifieddata.staticfiles.io/accounts/14108164-…/load.js
  • Functional — reCAPTCHA, Vimeo player, js-cookie, jQuery ×2, date picker

SearchAtlas deserves a specific look: a tool that rewrites the page at runtime can quietly be the thing setting a canonical or a title, which makes it a prime suspect for the www mismatch above.

06 · What to do, in order

Ordered by return on effort. The first three are an afternoon between them and account for most of the available gain.

#ActionEffortWhy it matters
1Re-export the 22 images over 500 KB; enable WebP2–3 hRemoves ~35 MB. Biggest single win.
2Point canonicals and JSON-LD at the apex host15 minStops 35 pages contradicting the server.
3Remove the duplicate jQuery tag5 min61 KB and a class of intermittent bugs.
4Fix the /about JSON-LD syntax error10 minRestores discarded structured data.
5Resolve the two GTM containers to one1–2 hTrustworthy conversions before scaling spend.
6Eager-load and preload the first image per template30 minDirectly improves LCP.
7Self-host the date picker20 minRemoves supply-chain risk on a lead form.
8Default share image + per-page overrides1 h25 pages share as bare links.
9Alt text for /gallery, /il-floor-plans, /dining2 hAccessibility plus image search.
10Descriptions and H1s on the 18 thin pages4–6 hOngoing content work.

Method and limits. Measured 10 September 2026 by fetching all 35 sitemap URLs and their assets directly, reading real HTTP responses and content-length values. Timings are server-side — time to first byte and transfer — from a single location. No browser was run, so there are no field Core Web Vitals here, and anything injected by JavaScript at runtime (notably GTM tags and SearchAtlas rewrites) was not observed. Image weights count what each page requests by default and exclude lightbox assets that load only on click.