> ## Documentation Index
> Fetch the complete documentation index at: https://docs.theroyalglow.in/llms.txt
> Use this file to discover all available pages before exploring further.

# SEO & AI Visibility

> Local SEO, structured data, AI search optimisation, and agent-friendly standards for Royal Glow.

# SEO & AI Visibility

<Info>
  **In one line:** Every page is built to rank locally (GMB + NAP consistency),
  pass 100% Lighthouse SEO, carry server-side JSON-LD, follow an answer-first
  content pattern, and be fully readable by AI crawlers via `llms.txt` and
  agent-friendly API routes.
</Info>

Royal Glow is a location-based premium business — local search is the primary customer acquisition channel alongside Meta ads. Every page is built to rank locally, pass 100% Lighthouse SEO, and be fully readable by AI agents and search crawlers from day one.

<Warning>
  These are **non-negotiable implementation standards**, not optional enhancements. Lighthouse SEO = 100 is a hard CI gate — PRs that drop below it are blocked.
</Warning>

## Local SEO Strategy

<Tabs>
  <Tab title="Google My Business">
    * Fully complete the GMB listing: name, address, phone, hours, category (Beauty Salon / Day Spa), photos
    * GMB booking link points to `https://theroyalglow.in/?book=1&utm_source=gmb` — Google Maps users open the homepage booking dialog with source attribution
    * In-store QR posters point to `https://theroyalglow.in/?book=1&utm_source=walkin`
    * Respond to all Google reviews within 24h
    * Post weekly GMB updates (offers, new services, events)
  </Tab>

  <Tab title="NAP Consistency">
    NAP (Name, Address, Phone) must be **identical** across every platform:

    ```text theme={null}
    Name:    Royal Glow Salon & Spa
    Address: 1st Floor, Narmada Complex, 48/3, Rayasandra Main Rd,
             Above SBI Bank, Naganathapura, Parappana Agrahara,
             Bengaluru, Karnataka 560100, India
    Phone:   +91 63601 35720
    Website: https://theroyalglow.in
    ```

    Any mismatch hurts local ranking. Use the `<address>` HTML tag on every page that shows contact info.
  </Tab>

  <Tab title="Local Keywords">
    | Page     | Primary Keyword                    | Secondary                        |
    | -------- | ---------------------------------- | -------------------------------- |
    | Homepage | `luxury salon in Bengaluru`        | `premium spa Bengaluru`          |
    | Services | `[service name] in Bengaluru`      | `best [service] near me`         |
    | Booking  | `book salon appointment Bengaluru` | `online salon booking Bengaluru` |
  </Tab>
</Tabs>

## Structured Data (JSON-LD)

All JSON-LD is injected server-side via Next.js `generateMetadata()` — never client-side.

### LocalBusiness + BeautySalon (every page)

The homepage carries the full `LocalBusiness` + `BeautySalon` + `DaySpa` schema including geo-coordinates, opening hours, amenity features, and payment methods.

### Service Schema (each service page)

```json theme={null}
{
  "@context": "https://schema.org",
  "@type": "Service",
  "serviceType": "Deep Tissue Massage",
  "provider": { "@type": "LocalBusiness", "name": "Royal Glow Salon & Spa" },
  "offers": { "@type": "Offer", "price": "2500", "priceCurrency": "INR" }
}
```

### Additional Schemas

| Schema                        | Where                           |
| ----------------------------- | ------------------------------- |
| `BreadcrumbList`              | All inner pages                 |
| `FAQPage`                     | Homepage + FAQ page             |
| `Organization`                | Homepage                        |
| `WebSite` with `SearchAction` | Homepage (sitelinks search box) |
| `BlogPosting`                 | `/blog/[slug]`                  |
| `Person`                      | Staff profile pages             |

## Sitemap & Robots

### sitemap.xml

Generated by Next.js 16 built-in `app/sitemap.ts`. Static routes hardcoded + blog posts fetched from Payload REST API at build time.

| URL                  | Priority | Change Frequency |
| -------------------- | -------- | ---------------- |
| `/`                  | 1.0      | weekly           |
| `/services`          | 0.9      | weekly           |
| `/services/[slug]`   | 0.8      | monthly          |
| `/about`, `/contact` | 0.6      | monthly          |

**Excluded:** `/admin/*`, `/api/*`, `/profile/*`, `/book` (Meta ad lead page — no SEO value)

### robots.txt

All AI crawlers are explicitly allowed — Royal Glow benefits from maximum AI visibility:

```txt theme={null}
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /api/
Disallow: /profile/

User-agent: GPTBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Googlebot-Extended
Allow: /

Sitemap: https://theroyalglow.in/sitemap.xml
```

## AI Search Visibility (Google AI Overviews, ChatGPT, Perplexity)

Google AI Overviews pull from pages that directly answer questions in the first 2–3 sentences, use structured content, and have strong E-E-A-T signals.

### Answer-First Content Pattern

Every public page leads with a direct answer, not a marketing intro.

<Tabs>
  <Tab title="Wrong — marketing-first">
    ```text theme={null}
    "Welcome to Royal Glow Salon & Spa, where beauty meets luxury..."
    ```

    Buries the facts an AI Overview needs behind brand fluff.
  </Tab>

  <Tab title="Correct — answer-first">
    ```text theme={null}
    "Royal Glow Salon & Spa is a premium beauty salon and spa in Bengaluru,
    offering haircuts, facials, massages, and bridal packages.
    Book online at theroyalglow.in/?book=1 or call +91 63601 35720.
    Open Monday–Friday 10am–9pm, Saturday–Sunday 10am–10pm."
    ```

    States what, where, how to book, and hours in the first three sentences.
  </Tab>
</Tabs>

### FAQ Strategy

FAQs have the highest citation rate in AI Overviews. Each FAQ is also marked up in
`FAQPage` JSON-LD — this triggers Google's FAQ rich result AND feeds AI Overviews.
Required topics and their answer patterns:

<AccordionGroup>
  <Accordion title="What services does Royal Glow offer?">
    Answer pattern: a concise list with prices.
  </Accordion>

  <Accordion title="How do I book at Royal Glow?">
    Answer pattern: online link + phone + QR.
  </Accordion>

  <Accordion title="Does Royal Glow take walk-ins?">
    Answer pattern: a direct yes/no + the policy.
  </Accordion>

  <Accordion title="Where is Royal Glow located?">
    Answer pattern: full address + landmark.
  </Accordion>

  <Accordion title="What are Royal Glow's opening hours?">
    Answer pattern: days + times.
  </Accordion>
</AccordionGroup>

## `llms.txt` — AI Agent Discovery

`llms.txt` is the robots.txt for AI models — a plain-text file at the site root that helps AI systems understand the site quickly.

Served at `https://theroyalglow.in/llms.txt` and `https://theroyalglow.in/llms-full.txt` (detailed version with full service list and prices).

Both files are served via Next.js API routes that pull live data from Neon DB so prices stay current without manual updates.

## Agent-Friendly Build Standards

### Semantic HTML (Non-Negotiable)

* Use `<header>`, `<nav>`, `<main>`, `<section>`, `<article>`, `<address>`, `<time>`, `<figure>`
* Never `<div onClick>` — always `<button>` for actions
* One `h1` per page, no skipping heading levels
* Contact info wrapped in `<address>` tag
* Dates: `<time datetime="2026-01-15">15 January 2026</time>`

### Metadata — Every Page

```tsx theme={null}
export const metadata: Metadata = {
  title: 'Deep Tissue Massage | Royal Glow Salon & Spa',
  description: 'Book a deep tissue massage at Royal Glow...',
  openGraph: { title: '...', description: '...', images: ['/og-massage.jpg'] },
  alternates: { canonical: 'https://theroyalglow.in/services/deep-tissue-massage' },
}
```

### Agent-Exposed API Endpoints

| Action              | Endpoint                             | Method |
| ------------------- | ------------------------------------ | ------ |
| Get all services    | `/api/services`                      | GET    |
| Get service detail  | `/api/services/[slug]`               | GET    |
| Check availability  | `/api/availability?service=X&date=Y` | GET    |
| Submit booking      | `/api/bookings`                      | POST   |
| Submit lead enquiry | `/api/leads`                         | POST   |

## E-E-A-T Signals

Google AI Overviews heavily weight Experience, Expertise, Authoritativeness, Trustworthiness:

<AccordionGroup>
  <Accordion title="Experience">
    Gallery with real service photos (not stock), staff profiles with real photos.
  </Accordion>

  <Accordion title="Expertise">
    Detailed service descriptions — what it involves, who it's for, aftercare advice.
  </Accordion>

  <Accordion title="Authoritativeness">
    Google Reviews, NAP consistency across directories, local backlinks.
  </Accordion>

  <Accordion title="Trustworthiness">
    HTTPS everywhere, Privacy Policy page, real contact info on every page.
  </Accordion>
</AccordionGroup>

## Performance & Core Web Vitals

| Target                 | Value            |
| ---------------------- | ---------------- |
| LCP                    | `< 2.5s`         |
| CLS                    | `< 0.1`          |
| INP                    | `< 200ms`        |
| Lighthouse SEO         | 100 (CI gate)    |
| Lighthouse Performance | `≥ 95` (CI gate) |

All public pages are server-rendered or statically generated. Core content is readable without JavaScript.


## Related topics

- [Glossary](/content/docs/glossary.md)
- [Analytics](/content/docs/analytics.md)
- [API Reference](/content/docs/api-reference.md)
- [Pages & Routes](/content/docs/pages-and-routes.md)
- [Git Workflow](/content/docs/git-workflow.md)
