# G Media site fixes after the 10/6 self-audit

Deployed 10/6/2026 with `create/scripts/deploy.py` (Cloudflare Pages `gmediaco-site`). The final deploy is `055dddae`.
Every edited file has a `.bak-1006-aplus` backup in `create/builds/`.
Lighthouse 12 ran locally against the live site, using the same method as the audit: the default mobile preset (slow 4G emulation) and the desktop preset.
The reports are saved as `raw/lh_fix1006_*.json`. Screenshots are in `shots/after_1006/` at 390 px (m_) and 1440 px (d_).

## 1. Mobile speed: FIXED

| Page | Before (audit) | After (live, 10/6 after deploy) |
|---|---|---|
| Homepage, mobile | 79 / 88 / 83; LCP 4.2 / 3.3 / 3.6 s; TBT 210 ms | **96 / 99 / 99; LCP 2.3 / 1.9 / 1.8 s; TBT 0 ms**; CLS 0 to 0.002 |
| Video production, mobile | 70; LCP 3.3 s; **CLS 0.296**; TBT 290 ms | **98 / 98; LCP 2.0 s; CLS 0.001; TBT 0 ms** |
| Podcast studio (service page), mobile | not in the audit; first run today 80, LCP 5.1 s | **89; LCP 3.5 s** |
| Studio tour, mobile | 80; LCP 4.1 s | 93; LCP 2.7 s (this page keeps its own tags, see below) |
| Homepage, desktop | 98 | **100** (LCP 0.6 s) |
| Video production, desktop | not run | **100** |
| Podcast studio, desktop | first run today 82 | **96** |
| Best practices (all G Media template pages) | 79 | **100** |
| Accessibility | 98 | **100** |

What changed:
- **Ad and analytics tags load after the page is usable.** They load on the first scroll, tap or key press, or 3.5 s after the load event. GA4, Google Ads and the Meta pixel still load for every visitor. Events fired earlier are queued.
  - Verified: GA4 collect and the Ads hits fire about 3.5 s after load with no interaction.
  - Not delayed on the funnel pages (`/apply-for-marketing`, `/content-partner`, `/podcast-inquiry`, `/book-a-studio-tour`), so their conversion tracking is unchanged.
  - Trade-off: a visitor who leaves within about 3.5 s without touching the page is no longer counted.
- **Phone-sized hero poster.** `hero-poster-768.webp` (17 KB, was 41 KB) is served through srcset and preload. The video poster attribute was removed so phones do not download the large poster twice. The hero video already started only after load.
- **Below-the-fold images load after the page.** This covers the client logo strip (68 images, now with width attributes so nothing jumps) and the three review photos. They load after the load event, at idle.
- **Google rating API call** now waits for the load event. The `data-g-count` / `data-g-rating` hooks are untouched; the live call still fills 5.0 / 31.
- **Poppins is self-hosted** in `/assets/gm/fonts/`. The files are identical to Google's (OFL licence) and use font-display: swap. This removes two extra connections before the first paint. A metric-matched "Poppins Fallback" (sized Arial) means text no longer jumps when the font arrives.
- **Cookie notice no longer moves.** It used to slide up with a CSS transition once the sticky bar appeared, which caused a 0.29 layout shift. It is now placed once, before the first paint, above the sticky bar's space, and never animated.
- **/video-production, /corporate-convention-production and /work:**
  - The three project-video posters are now WebP (29 to 57 KB, were 78 to 157 KB JPGs).
  - The posters load only when the player nears the screen, and `preload="none"` is set.
- **/podcast-studio-las-vegas:**
  - The hero has a phone crop (59 KB, was 162 KB). It covers the same part of the photo that phones already showed.
  - The gallery images have 640 px srcset versions.

## 2. "Book a Tour" mismatch: FIXED ON THE SITE, BOOKING PAGE NEEDS A HUMAN

- Every site-wide tour CTA already pointed to `/book-a-studio-tour`. One was wrong: the "Book a Studio Tour" button on `/about` went to `/apply-for-marketing`. It now goes to `/book-a-studio-tour`.
- Tour page copy now says it plainly:
  - Hero: "Free 20-minute in-person tour · 4160 S. Durango Dr. #140 · No commitment".
  - Under the bottom Book A Tour button: "In-person tour at our studio, 4160 S. Durango Dr. #140, Las Vegas."
  - Step 01: "Click 'Book a Tour' and choose a time. The tour is in person at our studio … Prefer to call? (702) 499-5111".
- Step 01 used to say "Click 'Book This Studio' and Calendly opens with tour times". That was wrong on two counts: Book This Studio opens the 60-minute studio session schedules, and the site does not use Calendly. The text is corrected.
- The footer Instagram link on the tour page pointed to @itsluisbarraza. It now points to @gmedia.lv.
- **Still wrong, needs Corey or Luis:** both Book a Tour buttons open "30 min with Corey" . Click-tested live 10/6: the page still says **"Google Meet video conference info added after booking"**, and the slot is 30 minutes while the site says 20. Fix it in that Google appointment schedule: set the location to "In person, 4160 S Durango Dr #140" and remove Meet, or make a separate "Studio tour (in person)" schedule and send me its link.
- **Not tracked:** a booked tour fires no conversion. The tour page listens only for Calendly events, and Google appointment pages send none.

## 3. "50M+ views" claim: FIXED

- `/apply-for-marketing` (both copies) replaced "50M+ Views We've Built" with **"506K · IG Views, One Client, 2026"**.
- The figure links to `/work/project-wellbeing`. The case study reports 506,204 Instagram views on 161 G Media reels, Jan 1 to Oct 5, 2026, using Instagram's own count via the Graph API.
- "30+ Vegas Brands" is kept: the site shows 34 client logos.

## 4. Dead logo link and the redirect chain: LINK FIXED, ONE-HOP REDIRECT BLOCKED

- rcghomeloans.com still fails (no HTTP or HTTPS response on 10/6). The RCG Home Loans logo stays, without a link, on the homepage strip and on /work.
- `/thank-you-for-the-interest` (404 in search) now 301s to `/` via `_redirects`.
- **HSTS turned on** (zone setting, max-age 6 months, no includeSubDomains, no preload), plus nosniff. Verified live: `strict-transport-security: max-age=15552000`.
- **Email obfuscation turned off** (zone setting). Crawlers now see `mailto:info@gmediaco.com` instead of `/cdn-cgi/l/email-protection` (404). The email-decode script is gone from every page. The address was already public in the schema and llms.txt.
- **http://gmediaco.com still takes 2 hops:** Cloudflare "Always Use HTTPS", then the Pages middleware to www. A single-hop redirect rule is pending.
  - Match: hostname equals gmediaco.com, path does not start with /api/.
  - Action: 301 to `concat("https://www.gmediaco.com", http.request.uri.path)`, query string kept.

## 5. Name, address and schema: FIXED ON OUR SITE

- Titles and meta descriptions: none say "Galindo Media" except where the legal name belongs (About, Privacy and Terms use "Galindo Media LLC").
- Footers on 3 legacy pages read "© 2026 G Media | Galindo Media". They now read "G Media · Galindo Media LLC".
- Five service pages said "Older reviews use our legal name, Galindo Media". They now say "our former name".
- /video-production still said "five in-house studios" in its FAQ and FAQ schema. It now says four studio sets, at Unit 140.
- Address on our pages: uniform "4160 S Durango Dr, Unit 140, Las Vegas, NV 89147", in 103 places.
  - Not mass-rewritten to "#140". Unit, #, and Ste are the same address to Google, and the audit recommends listings use "Unit 140".
  - The only suite 120 on the site is on the Galindo Group Real Estate client pages (their office, not ours). Left alone.
- No `galindo-media.com` references anywhere on the site.
- Schema:
  - The sameAs list (Instagram, TikTok, Facebook, LinkedIn, Google Maps, Yelp) now also has YouTube @gmedia.lasvegas. The channel links back to gmediaco.com.
  - 28 pages had bare "G Media" Organization nodes. They now carry `@id` `https://www.gmediaco.com/#organization`, so they resolve to the full entity.
  - All 220 JSON-LD blocks parse with no duplicate keys.
- **galindo-media.com is not on our Cloudflare.**
  - Registrar: Squarespace Domains (registered 2023-09-27, expires 2027-09-27). DNS is on Google Domains/Squarespace nameservers, the apex points to Squarespace IPs, and www has no record.
  - A 301 to www.gmediaco.com has to be set in Squarespace Domains (domain forwarding) by whoever holds that login.

## 6. Other items from "Also worth fixing"

- Footer headings went from H2 straight to H4 on 81 pages. They are now H3 with the same look, and Lighthouse accessibility is 100.
- `/content-partner` is indexable but was missing from the sitemap. It has been added.
- **Not changed (needs Luis):** `/apply-for-marketing` has 11 required fields: first and last name, email, phone, business, Instagram, industry, budget, decision maker, challenge and timeline. The form handler accepts any of them missing, so making some optional would not break it. But they are qualification questions, and the page says "Takes 30 seconds". Candidates to make optional: last name, Instagram, decision maker, timeline.
- **Not changed (design):**
  - Inline text links 21 to 23 px tall and the 6 px photo dots on the tour page (tap target size).
  - The tour, apply and pricing guide pages have no main menu.
  - The cookie notice is still 121 px tall on phones. It no longer moves, but it is the same box.
- **Needs a human (outside the site):**
  - Yelp "Galindo Media, 4160 S Durango Rd 120" and the two MapQuest suite-120 listings: correct to "G Media, 4160 S Durango Dr, Unit 140".
  - Corey's tour booking schedule (Google Meet, 30 min).
  - The galindo-media.com forwarding (Squarespace).
  - The one-hop redirect rule.

## Files changed (create/builds/)

- `assets/gm/`:
  - Edited: `site.js`, `site.css`, `consent.js`.
  - Added: `hero-poster-768.webp` and `fonts/` (16 woff2 files).
- `assets/work/`: added `corp-roc-energy.webp`, `clark-county-blanket-fort.webp` and `corp-pozcast.webp`.
- `images/studios/`: added `high-roller-studio-7-mobile.webp` and 24 `*-640w.webp` files.
- `index.html`, `about.html`, `video-production.html`, `corporate-convention-production.html`, `work.html`, `podcast-studio-las-vegas.html`.
- `book-a-studio-tour.html` and `book-a-studio-tour/index.html`.
- `apply-for-marketing.html` and `apply-for-marketing/index.html`.
- `_redirects` and `sitemap.xml`.
- Site-wide on 95 pages:
  - The tag loader change (89 pages).
  - The Google Fonts tags removed (84 pages).
  - Cache-busting version strings on `site.css` / `site.js` / `consent.js`.
  - Footer H4 to H3 (81 pages).
  - The Organization `@id` (28 pages) and sameAs (13 pages).
- Cloudflare zone gmediaco.com: HSTS on, nosniff on, email obfuscation off.
