# SEO Audit — Mademoiselle Fiona (mademoisellefiona.com)

*Audit date: 2026-03-04*

---

## Executive Summary

**Overall health: POOR.** The site has decent meta tag setup via AIOSEO but a critical rendering problem that undermines everything. The Flo Flex Builder renders all visual content via JavaScript, but unlike a fully JS-rendered SPA, the server does return some HTML — the meta tags, schema markup, and basic text are present in the raw HTML. However, the actual page content (headings, body text, images, portfolio) is rendered client-side, meaning crawlers see very little meaningful content.

### Top 5 Priority Issues
1. **JS-rendered content invisible to most crawlers** — Portfolio, testimonials, and page content load via Flo Flex Builder JS. Google can render JS, but unreliably; other search engines and AI crawlers cannot.
2. **No blog / zero indexable content** — No blog posts exist. The site has pages and galleries but almost no text-rich, indexable content.
3. **No services page** — No dedicated page for "luxury wedding photography," "destination wedding photographer," etc.
4. **No local SEO presence** — No Google Business Profile optimization for NYC, Lisbon, or Paris.
5. **Zero AI search visibility** — No structured FAQ, no long-form content for AI engines to cite.

---

## 1. Technical SEO

### 1.1 Crawlability & Indexing

| Check | Status | Notes |
|-------|--------|-------|
| robots.txt | ✅ OK | Standard WP robots.txt, sitemap referenced |
| XML Sitemap | ✅ OK | Generated by AIOSEO v4.9.4.1, multiple sub-sitemaps |
| HTTPS | ✅ OK | Valid SSL, HTTP/2 |
| Canonical tags | ✅ OK | Self-referencing canonicals via AIOSEO |
| Meta robots | ✅ OK | `max-image-preview:large`, no noindex |
| Server | ⚠️ | Apache on Bluehost shared hosting — not ideal for speed |

### 1.2 The Critical JS Rendering Problem

**Issue:** The site uses **Flo Flex Builder** (WordPress plugin) which renders page layouts entirely via JavaScript. When `web_fetch` or a crawler requests the page, they get:
- ✅ `<title>` tag, meta description, OG tags, JSON-LD schema (from AIOSEO — these are in `<head>`)
- ❌ Almost no body content — just the Flex Builder CSS/JS payload (~50KB+ of inline CSS for the builder framework)
- ❌ No visible `<h1>`, `<h2>`, `<p>` tags in the server-rendered HTML
- ❌ No `<img>` tags with alt text (images loaded via JS)

**Impact: CRITICAL.** Google's JS renderer (WRS) may eventually render some content, but:
- Crawl budget is wasted on JS rendering
- Other search engines (Bing, DuckDuckGo) have limited/no JS rendering
- AI crawlers (ChatGPT, Perplexity, Google AI) see almost nothing
- Social media crawlers get only the OG meta tags, not page content

**Fix options (in order of preference):**
1. **Replace Flo Flex Builder with a standard WordPress theme** (e.g., Flavor/flavor, Flavor/flavor Flavor Flavor — or Flavor Flavor/flavor). Use Flavor/flavor or a lightweight theme with server-side rendering. This is the nuclear option but the right one.
2. **Enable server-side rendering** in Flo Flex Builder if available (check their docs/support for SSR or pre-rendering options).
3. **Use a pre-rendering service** (Prerender.io, Rendertron) to serve static HTML to crawlers. Add middleware that detects bot user-agents and serves pre-rendered pages.
4. **At minimum:** Ensure critical text content is in the raw HTML even if layout is JS-rendered. Add real `<h1>` tags, paragraphs, and `<img>` tags with alt text in the HTML source.

### 1.3 Hosting & Speed

**Issue:** Shared Bluehost hosting (`host-header: c2hhcmVkLmJsdWVob3N0LmNvbQ==` = "shared.bluehost.com"). Combined with heavy JS rendering, expect poor Core Web Vitals.

**Fix:** Move to managed WordPress hosting (Cloudways, WP Engine, or even a VPS). For a $15K+ service, the site should load fast.

### 1.4 Schema Markup

**Status: Partially OK.** AIOSEO injects JSON-LD with:
- `Organization` (name: "Mademoiselle Fiona", phone, logo, Instagram/Pinterest sameAs)
- `WebPage` with breadcrumbs
- `WebSite`

**Missing schema:**
- `LocalBusiness` or `ProfessionalService` — critical for local SEO
- `Person` (Fiona as photographer)
- `Review` / `AggregateRating` — testimonials exist but aren't structured
- `Service` — no service schema
- `FAQPage` — no FAQ exists yet

---

## 2. On-Page SEO

### 2.1 Title Tags

| Page | Title | Assessment |
|------|-------|------------|
| Home | "Fiona Conrad ‣ Wedding Photography ‣ NYC, Paris, Lisbon" | ✅ Good — keywords present, location included |
| About | "About ‣ Fiona Conrad" | ❌ Wasted — should be "About Fiona Conrad ‣ French Wedding Photographer NYC & Lisbon" |
| Contact | "Contact ‣ Fiona Conrad" | ⚠️ OK but could include CTA |
| Kind Words | "Kind Words ‣ Fiona Conrad" | ❌ Should be "Client Reviews ‣ Luxury Wedding Photographer" |

### 2.2 Meta Descriptions

**Homepage:** "French wedding photographer based in NYC & Lisbon, offering timeless, artful photography capturing love with effortless sophistication and genuine emotion." — ✅ Good, though could include "luxury" keyword.

**Other pages:** Need to verify each has a unique, keyword-rich meta description via AIOSEO.

### 2.3 Heading Structure

**Critical problem:** Headings are rendered via JavaScript. The raw HTML contains no `<h1>` tags in the body. Crawlers that don't render JS see zero heading structure.

The JS-rendered homepage shows multiple `## ` headings (H2s?) — "Timeless, elevated photography for modern couples," "Love stories captured with a graceful touch," etc. These are poetic but not keyword-optimized.

**Fix:** The H1 on the homepage should be something like "Luxury Wedding Photographer — NYC, Paris & Lisbon" rendered in server-side HTML.

### 2.4 Image Optimization

**Issue:** All images are loaded via JS. The sitemap references images (good — AIOSEO image sitemaps), but the images in the HTML source have no `alt` attributes because they're injected by Flo Flex Builder.

**Filenames:** Mostly non-descriptive (e.g., `2024Sept7_HR_FionaConrad_1356.jpg`, `SS_74Wythe_Brooklyn_f_0817.jpg`). Should be descriptive like `luxury-wedding-photography-nyc-bowery-hotel.jpg`.

---

## 3. Content Gaps

### 3.1 Missing Pages (High Priority)

| Page Needed | Target Keywords | Priority |
|------------|----------------|----------|
| **Services** | "luxury wedding photography packages," "destination wedding photographer" | 🔴 Critical |
| **NYC Wedding Photography** | "luxury wedding photographer NYC," "New York wedding photographer" | 🔴 Critical |
| **Destination Wedding Photography** | "destination wedding photographer Europe," "France wedding photographer" | 🔴 Critical |
| **Lisbon/Portugal Weddings** | "wedding photographer Lisbon," "Portugal destination wedding" | 🟡 High |
| **Paris/France Weddings** | "wedding photographer Paris," "French chateau wedding photographer" | 🟡 High |
| **FAQ** | "how much does a luxury wedding photographer cost," common questions | 🟡 High |
| **Blog** | Long-tail keywords, venue-specific content, real weddings | 🟡 High |

### 3.2 Blog Strategy

**Current state:** Zero blog posts. The `post-archive-sitemap.xml` exists but likely empty or has old content.

**Recommended content pillars:**
1. **Real wedding features** — "Luxury Wedding at [Venue Name]: [Couple Name]" — target venue-specific keywords
2. **Venue guides** — "Best Wedding Venues in NYC for Intimate Celebrations" — captures planning-stage searches
3. **Planning tips** — "What to Look for in a Luxury Wedding Photographer" — captures top-of-funnel
4. **Destination guides** — "Planning a Destination Wedding in Portugal: A Photographer's Guide"

Aim for 2 posts/month minimum. Each post should be 1,000-1,500 words with 10-15 optimized images.

### 3.3 Existing Content Assessment

- **About page:** Good personal narrative but short. Missing keywords like "luxury," "editorial." Should mention specific venues and locations worked at.
- **Kind Words page:** Has great testimonials but they're not structured (no schema). Should add client names, wedding locations, and dates.
- **Portfolio/galleries:** Exist in sitemap but content is JS-rendered. Gallery pages (e.g., `/cannes-chateau-wedding/`) could be powerful SEO assets if they had text content alongside images.

---

## 4. Local SEO

### 4.1 Google Business Profile

**Status: Unknown/likely not optimized.** The schema lists a phone number (+12102873684) but no address. For a photographer serving three cities, the approach should be:

**Recommended setup:**
- **Primary GBP listing:** NYC (where most US clients search) — category "Wedding Photographer"
- **Secondary GBP listing:** Lisbon — if she has a local address/studio
- **Paris:** May be harder without a fixed address. Consider a coworking space address.

**Each listing needs:**
- Consistent NAP (Name, Address, Phone)
- Service area defined
- Portfolio photos uploaded
- Reviews solicited from past clients
- Regular Google Posts (monthly)

### 4.2 Directory Listings

**Priority directories to list on:**
- The Knot (already featured — verify profile is active and optimized)
- WeddingWire / Zola
- Style Me Pretty vendor directory
- Junebug Weddings
- Here Comes The Guide (NYC)
- Casar em Portugal (for Lisbon)
- Mariages.net (for France)

### 4.3 NAP Consistency

Ensure name appears as "Mademoiselle Fiona" OR "Fiona Conrad" consistently across all listings. Currently the site uses both — pick one for SEO or ensure they're cross-referenced.

---

## 5. AI SEO / Answer Engine Optimization (AEO)

### 5.1 Current AI Visibility

**Likely ZERO.** The JS-rendering issue means AI crawlers (GPTBot, PerplexityBot, Google-Extended) see almost no content. Even if they could crawl, there's no long-form, informational content for them to cite.

### 5.2 What AI Engines Need

To appear in AI-generated answers for queries like "best luxury wedding photographer in NYC" or "destination wedding photographer Europe":

1. **Crawlable, text-rich content** — Fix the JS rendering issue first
2. **FAQ content** — Structured Q&A that AI engines can extract:
   - "How much does a luxury wedding photographer cost?"
   - "What's included in a wedding photography collection?"
   - "How far in advance should I book a wedding photographer?"
3. **Authoritative mentions** — Get featured/quoted in wedding blogs, publications, and industry resources that AI engines already index
4. **Entity establishment** — Make "Mademoiselle Fiona" / "Fiona Conrad" a recognized entity:
   - Wikipedia is unrealistic, but Wikidata entry is possible
   - Consistent mentions across wedding industry publications
   - Google Knowledge Panel (triggered by GBP + consistent entity data)

### 5.3 AI-Specific Content Recommendations

- Add a `/faq/` page with 10-15 common questions, marked up with `FAQPage` schema
- Add an `/about/` page expansion with specific credentials, years of experience, notable venues, press features
- Create "pillar" content pages (services, locations) with comprehensive information AI can cite
- Ensure social profiles (Instagram, Pinterest) are linked and consistent

---

## 6. Prioritized Action Plan

### Phase 1: Critical Fixes (Weeks 1-4)
1. **Fix JS rendering** — Either switch theme, add pre-rendering service, or configure Flo Flex Builder for SSR. This blocks everything else.
2. **Create Services page** — Outline what's included, pricing philosophy, process. Target "luxury wedding photography" keywords.
3. **Create location pages** — NYC, Lisbon/Portugal, Paris/France. Each with 500+ words, venue lists, sample galleries.
4. **Set up Google Business Profile** — At minimum for NYC.

### Phase 2: High-Impact Improvements (Weeks 5-8)
5. **Start blog** — Publish 2-3 real wedding features with venue-specific SEO.
6. **Create FAQ page** — With FAQPage schema markup.
7. **Add LocalBusiness + Person schema** — Via AIOSEO custom schema settings.
8. **Optimize existing page titles** — About, Kind Words, gallery pages.
9. **Add alt text** — To all portfolio images (requires fixing the rendering issue first or doing it within the builder).

### Phase 3: Ongoing Growth (Months 3+)
10. **Publish 2 blog posts/month** — Alternating real weddings and planning guides.
11. **Build directory listings** — The Knot, WeddingWire, Junebug, etc.
12. **Solicit Google reviews** — From past clients.
13. **Guest post / get featured** — On wedding blogs for backlinks.
14. **Monitor AI visibility** — Monthly checks on ChatGPT, Perplexity for target queries.

---

## Appendix: Technical Details

### Site Stack
- **CMS:** WordPress (Apache/Bluehost shared hosting)
- **Page Builder:** Flo Flex Builder (pronto theme) — JS-rendered layouts
- **SEO Plugin:** All in One SEO (AIOSEO) v4.9.4.1
- **Analytics:** PixelYourSite Free v11.2.0.3 (Facebook pixel)
- **Forms:** Contact Form 7
- **Instagram:** Smash Balloon Instagram Feed v6.10.0
- **Fonts:** Google Fonts (Cinzel, Arapey, Playfair Display, Taviraj)

### Sitemap Structure
- `page-sitemap.xml` — Main pages
- `gallery-sitemap.xml` — Portfolio galleries
- `post-archive-sitemap.xml` — Blog posts (likely empty/minimal)
- `category-sitemap.xml`, `post_tag-sitemap.xml` — Taxonomy pages
- `gallery-category-sitemap.xml`, `gallery-tag-sitemap.xml` — Gallery taxonomies
- `entry_form-sitemap.xml` — Form entries (should be excluded)

### Schema Present (Homepage)
```json
Organization: "Mademoiselle Fiona"
- telephone: +12102873684
- sameAs: Instagram, Pinterest
- logo: LogoSite_01.png
WebPage, WebSite, BreadcrumbList
```

### Key Observations
- The `entry_form-sitemap.xml` (last modified 2022) should be excluded — form entries shouldn't be indexed.
- `post_tag-sitemap.xml` (last modified 2023) — likely thin/empty tag pages that should be noindexed.
- The site exposes `/wp-json/` API — not a security issue but confirms WP backend.
- OG type is set to "article" on homepage — should be "website".
