# SEO Migration Report

## Problems Found

- App Router is in use.
- `robots.ts`, `sitemap.ts`, blog JSON-LD, breadcrumb JSON-LD, and several fallback metadata/share URLs could fall back to `https://tools.cambridgeveritas.com`.
- Known legacy CI4 blog URLs were present in migration SQL data and needed one-to-one permanent redirects.
- Homepage H1 used animated typewriter text, which could leave crawlers with incomplete visible heading text.
- `www` and HTTP canonicalization was not enforced in application code.
- `in.cambridgeveritas.com` is configured as noindex; no automatic redirect was added because unique regional content was not proven.
- Blog article pages already server-render content, include metadata/schema, and call `notFound()` for missing posts.

## Files Changed

- `app/robots.ts`
- `app/sitemap.ts`
- `app/layout.tsx`
- `app/blog/[...slug]/page.jsx`
- `app/page.tsx`
- `app/algebra-one/page.jsx`
- `app/algebra-diagnostic/page.jsx`
- `app/algebra-privacy/page.jsx`
- `app/privacy-policy/page.jsx`
- `components/seo/BreadcrumbJsonLd.jsx`
- `components/algebra1/AlgebraFooter.jsx`
- `components/self-paced/SelfPacedProgrammesLanding.jsx`
- `lib/basePath.js`
- `lib/siteSeo.js`
- `next.config.ts`
- `proxy.ts`
- `SEO_APACHE_REDIRECTS.md`
- `SEO_MIGRATION_REPORT.md`

## Redirects Added

- `/blog/teacher-training/a-complete-guide-to-tesol-in-india-2024-costs-courses-career-paths`
  -> `/blog/teacher-training/tesol-certification-in-india-complete-guide-2026-costs-courses-and-careers`
- `/blog/ielts/how-can-i-become-ielts-certified-trainer`
  -> `/blog/ielts/how-can-i-become-an-ielts-certified-trainer`
- App-level 308 redirect for `http://cambridgeveritas.com/*`, `http://www.cambridgeveritas.com/*`, and `https://www.cambridgeveritas.com/*` to `https://cambridgeveritas.com/*`.

## Canonical Strategy

- Preferred canonical origin is `https://cambridgeveritas.com`.
- Main-domain, `www`, and `in` host canonical metadata now resolves to the preferred origin through the centralized SEO helper.
- Public URL fallback generation now defaults to `https://cambridgeveritas.com`, not localhost or tools subdomain.

## Robots Changes

- Sitemap now resolves to `https://cambridgeveritas.com/sitemap.xml` by default.
- Added disallow rules for private/auth/checkout/tool surfaces.
- Public blog, course, landing, image, CSS, and JS paths remain allowed.

## Sitemap Changes

- Sitemap default base now uses `https://cambridgeveritas.com`.
- Existing dynamic entries for blogs, grammar, webinars, presentations, practice, impact stories, level tests, and public static routes are preserved.

## SSR Issues Fixed

- Homepage now has one semantic H1 with complete text in initial HTML while preserving the visual typewriter.
- Blog articles were already SSR and not changed structurally.

## Metadata Issues Fixed

- Root Organization/WebSite schema fallback URL now uses the main domain.
- Blog Article/Breadcrumb JSON-LD fallback URL now uses the main domain.
- Breadcrumb JSON-LD component and self-paced ItemList schema no longer point at the tools subdomain.
- Algebra fallback metadata canonicals no longer point at the tools subdomain.

## Soft-404 Issues Fixed

- Blog article route already returns `notFound()` for missing posts.
- Dynamic course/catalogue/practice/webinar/impact routes inspected in search results already use `notFound()` in key places.

## Structured Data Changes

- Updated existing JSON-LD URL origins only. No new fake ratings, reviews, awards, or accreditation claims were added.

## Internal-Link Problems

- Removed remaining hard-coded tools-subdomain structured/share URLs discovered in app/components.
- Normalized a visible privacy-policy website string from `www.cambridgeveritas.com` to `cambridgeveritas.com`.

## Remaining Items Needing Manual Verification

- Confirm whether `in.cambridgeveritas.com` is duplicate content. If duplicate, migrate it with path-preserving 301/308 redirects to the main domain.
- Verify production Apache/GCP/load balancer redirect behavior, especially before requests reach Next.js.
- Verify database-driven sitemap entries do not include unpublished or intentionally noindex records.
- Verify marketing claims before editing: `14,000+`, `25,000+`, `294,000+`, accreditation, UK-regulated, Ofqual-recognised, British Council/IDP recognition, university affiliation, and partnership claims appear in multiple places and need evidence-backed consistency.
- Continue mapping old CI4 URLs from server logs, Search Console 404 reports, and any old sitemap exports.

## Apache/Server Changes Required Outside Repository

- Apply the rules in `SEO_APACHE_REDIRECTS.md` if Apache handles traffic before Next.js.
- Ensure the production host sets `x-forwarded-proto=https` when traffic is HTTPS, so app-level redirects do not misread protocol.

## OLD URLS THAT STILL NEED MAPPING

- No additional confident one-to-one mappings were discovered beyond the two blog URLs above.
- Use Search Console `Not found (404)`, old CI4 sitemaps, access logs, and backlink exports to build the next redirect batch. Do not redirect unrelated removed pages to `/` or `/blog`.

## Search Console Post-Deployment Checklist

- Submit `https://cambridgeveritas.com/sitemap.xml`.
- Remove obsolete sitemap submissions if appropriate.
- Inspect the homepage URL.
- Request reindexing of major repaired pages.
- Inspect major old redirected URLs.
- Review Page indexing -> Not found (404).
- Review Page indexing -> Crawled - currently not indexed.
- Review Page indexing -> Duplicate without user-selected canonical.
- Review Page indexing -> Alternate page with proper canonical.
- Compare Performance pages before/after migration.
- Compare queries before/after migration.
- Monitor impressions/clicks for at least several weeks.
