SEO & Performance Audit

yogaloom.com

Reformer Pilates & Yoga studio, Muswell Hill — findings ranked by expected impact on organic visibility.
Audited 2026-09-06 41 pages crawled WordPress · Elementor · Yoast SEO
2
pages competing for the same title as the homepage
3
separate live pages on "reformer pilates equipment"
0
LocalBusiness / review schema, despite a 5.0★, 96-review widget
48
/100 Lighthouse performance score, desktop (mobile: 63–69)

High priority

fix first — actively splitting rankings today

Verified by comparing live title tags, the XML sitemap, and real Google search results for your own site — not estimates.

Homepage title doesn't cover your main service, and duplicates another page

Cannibalization
Evidence
Homepage <title> is "Yoga in Muswell Hill | Yogaloom" — nearly word-for-word the title and meta description of the separate page /yoga-in-muswell-hill/. Neither mentions "Pilates," although your own H1 leads with "Personalised Reformer Pilates/Yoga Classes."
Impact
Google has to pick one of two near-identical pages to rank for your brand + location search — splitting the authority either page could hold alone, and under-selling Pilates, likely your higher-value service.
Fix
Rewrite the homepage title/meta to name both services and the area, e.g. Reformer Pilates & Yoga Studio in Muswell Hill, North London | Yogaloom. Fold /yoga-in-muswell-hill/'s unique content into the homepage and 301-redirect it, or give it a clearly different angle and title.

Three pages compete for "reformer pilates equipment" — and the wrong one is winning

Cannibalization
Evidence
/reformer-pilates/, /reformer-equipment-pilates/ and /private-equipment-reformer-pilates/ are all live. In a live search for "reformer pilates Muswell Hill," your /reformer-equipment-pilates/ page outranked your flagship /reformer-pilates/ page — while competitor Reform Room took 4 of the top 10 results.
Impact
Your best-optimized page (well-written title, covers "Pilates North London," "Muswell Hill," "Yoga & Pilates Studio London") isn't the one showing up — a weaker page is absorbing its clicks.
Fix
Pick /reformer-pilates/ as canonical for the core keyword, 301-redirect the other two into it (or re-scope them narrowly, e.g. equipment-buying only, and link to the main page from within them).

Old "-2" duplicate pages are still live, indexed, and competing with the real ones

Duplicate content
Evidence
/about-us-2/, /time-table-2/ and /all-offers-2/ all return 200 OK. /about-us-2/ surfaced in a live Google result today. /time-table-2/'s title tag reads "Contact Us" — it doesn't even describe its own URL, a leftover from a page rebuild.
Impact
Real ranking pages already indexed and appearing in search — quietly diluting whichever page (About, Timetable, Offers) should be the one Google trusts.
Fix
Confirm which page in each pair is the one you actually link to from your menu, 301-redirect the other, and remove it from the sitemap.

No LocalBusiness or review schema, despite a 5.0★/96-review widget on the homepage

Missed rich result
Evidence
The site's structured data (Yoast-generated) only defines WebPage, WebSite, Organization and an empty BreadcrumbList — no LocalBusiness/ExerciseGym type, no address, no AggregateRating, even though the homepage displays a 5.0-star, 96-review Google Reviews widget.
Impact
That star rating can't appear directly in Google search results without matching schema — a proven click-through lift for local, reviews-driven businesses like a studio.
Fix
Add LocalBusiness schema with name, address (50 Hillfield Park Mews), phone, and an AggregateRating block (5.0 / 96) — most SEO plugins, including Yoast, support this via a Local SEO add-on or a manual schema snippet.

Mobile pages take up to 24 seconds to become interactive

Performance
Evidence
A real Lighthouse audit run directly against the live site (Google's PageSpeed API had zero unauthenticated quota) scored mobile performance 63–69/100 across two clean runs — Time to Interactive 16–18s, Speed Index 12.2s. A third run scored just 28/100 when the server briefly took 2.6s to respond to the first request (vs. ~700ms normally), pushing Time to Interactive to 23.7s — so response time itself is inconsistent. Desktop scored 48/100, dragged down by a layout-shift score of 0.617 (anything over 0.1 counts as poor) that mobile doesn't show. The homepage ships 4.9 MB (mobile) / 6.3 MB (desktop) across ~206–211 requests, including 404–573 KiB of JavaScript that's downloaded but never executed.
Impact
Core Web Vitals are a direct Google ranking factor, and mobile is where most local "near me" searches happen — a visitor waiting 16+ seconds to interact has usually already left.
Fix
Same root cause as the plugin-stack findings below — trimming the three overlapping page builders is the highest-leverage single fix. Separately worth investigating: the server's occasional slow response, and what's causing the desktop layout shift (a slider/carousel or the reviews widget reflowing in after load are the likely suspects).

Medium priority

meaningful, less urgent

An unedited page-builder placeholder is live on the homepage

On-page
Evidence
One of the homepage's H2 headings literally reads "Add Your Heading Text Here" — Elementor's default placeholder, never replaced.
Impact
A wasted heading tag Google could otherwise use for a keyword, and a visible sign of an unfinished page to any visitor who scrolls past it.
Fix
Open that section in Elementor and write a real heading for it.

Three overlapping page-builder plugins are all loaded at once

Performance
Evidence
The homepage loads assets from Elementor core and ElementsKit Lite and Qi Addons for Elementor and Essential Addons for Elementor Lite — four page-builder libraries, each shipping its own CSS/JS, for what's normally a one-library job.
Impact
Redundant CSS/JS on every single page load — the single biggest lever on how heavy this site feels to load.
Fix
Audit which widgets from each add-on pack are actually used on the live site, standardize on one, and deactivate the rest.

The reviews widget alone loads 19 separate files

Performance
Evidence
Of ~164 script/stylesheet requests referenced on the homepage, 19 come from a single plugin: widget-google-reviews — just to render the review carousel.
Impact
One decorative widget accounts for roughly one in eight requests on the page.
Fix
Check the plugin for an asset-combining or lazy-load setting (load it only once the widget scrolls into view), or replace it with a lighter reviews embed.

Most homepage images skip lazy-loading and size hints

Performance
Evidence
21 of 35 <img> tags have no loading="lazy", and 15 have no explicit width/height.
Impact
Images below the fold load before they're needed, and images without dimensions can cause the page to visibly jump as it loads (layout shift).
Fix
Turn on lazy-loading site-wide in the theme/media settings, and make sure every image upload keeps its width/height attributes.

The XML sitemap includes plugin templates, not just real pages

Crawl budget
Evidence
sitemap_index.xml lists e-floating-buttons-sitemap.xml, elementskit_template-sitemap.xml, thsn-service-category-sitemap.xml and thsn-team-group-sitemap.xml alongside the real page-sitemap.xml — these are page-builder component types, not content.
Impact
Google spends part of its crawl budget on internal template fragments instead of your real pages.
Fix
In Yoast SEO → Search Appearance, turn off "Show X in search results" for those custom post types.

Lower priority

worth doing, no rush

No blog or article content

Growth
Evidence
No post-sitemap exists at all — the site has pages but no articles.
Impact
A studio with retreats, gong baths and Ayurvedic treatments has plenty of long-tail search queries ("reformer pilates for lower back pain," "what is a gong bath") going uncaptured.
Fix
Not urgent — worth a slow-and-steady content plan once the fixes above are shipped.

A leftover analytics plugin sits unconfigured

Housekeeping
Evidence
MonsterInsights is installed but its own homepage comment says "not currently configured." Analytics is fine — Google Analytics 4 is actually firing via Site Kit — this plugin is just dead weight.
Impact
Negligible on its own, but it's extra plugin surface for no benefit.
Fix
Either configure it properly or remove it — don't run two analytics plugins side by side.

What's already working

  • Brotli compression is enabled site-wide, and static assets carry sensible cache headers.
  • robots.txt is clean — nothing blocked, sitemap correctly referenced.
  • Yoast SEO is active and generating valid Organization/WebSite schema plus XML sitemaps automatically.
  • Google Analytics 4 is correctly firing via Site Kit — you do have real traffic data to work from.
  • /reformer-pilates/ itself is well-optimized: keyword-rich title and description covering Pilates, North London and Muswell Hill.
  • Already ranking #1–#2 for general "yoga pilates studio Muswell Hill" searches, ahead of established local competitors.
  • 96 five-star Google reviews — a strong trust signal, once schema lets Google display it (see High priority).
  • Layout shift is a non-issue on mobile (CLS 0.002–0.003) — the shift problem found is specifically a desktop one.
Methodology: Google's public PageSpeed Insights API has zero unauthenticated quota from this environment (a permanent 429, not a transient limit), so performance was measured with a real Lighthouse audit run directly against the live site instead. Mobile scores varied run-to-run (63, 69, and one anomalous 28 during a slow server response) — normal for a single-run lab test, and a reminder that this is a snapshot, not a trend. A Chrome/Lighthouse trace-compatibility issue also blocked pinpointing the exact element behind the desktop layout shift. For your own ongoing tracking, pagespeed.web.dev also draws on Google's real-user Chrome data (CrUX), which this one-off audit can't see.

Suggested order

  1. Rewrite the homepage title/meta and resolve the /yoga-in-muswell-hill/ duplicate. Highest leverage, lowest effort — a Yoast field edit.
  2. Decide a canonical page in each duplicate pair (about-us, timetable, offers, reformer/equipment) and 301-redirect the rest. Needs a content decision first, then a quick redirect setup.
  3. Add LocalBusiness + AggregateRating schema. One-time setup, unlocks the star-rating snippet in search.
  4. Clean up the plugin stack: fix the placeholder heading, drop two of the three overlapping Elementor add-ons, check the reviews widget's asset settings. Directly fixes the 63–69/100 mobile performance score — the biggest win available.
  5. Pass on images and the sitemap: lazy-load + dimensions, exclude template post types from Yoast's sitemap. Smaller wins, quick to batch together.
  6. Longer term: a blog content plan. Once the above is shipped, start capturing long-tail search demand.