{
  "error": {
    "message": "{\"error\":{\"message\":\"{\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Your API key was reported as leaked. Please use another API key.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\",\"code\":403,\"status\":\"Forbidden\"}}",
    "stack": "ApiError: {\"error\":{\"message\":\"{\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Your API key was reported as leaked. Please use another API key.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\",\"code\":403,\"status\":\"Forbidden\"}}\n    at throwErrorIfNotOK (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-67TFD6HC.js:36178:24)\n    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)\n    at async file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-67TFD6HC.js:35941:7\n    at async Models.generateContentStream (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-67TFD6HC.js:37037:16)\n    at async file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:278827:19\n    at async file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:255732:23\n    at async retryWithBackoff (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:275704:23)\n    at async GeminiChat.makeApiCallAndProcessStream (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:311287:28)\n    at async GeminiChat.streamWithRetries (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:311125:29)\n    at async Turn.run (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:311618:24)"
  },
  "context": [
    {
      "role": "user",
      "parts": [
        {
          "text": "<session_context>\nThis is the Gemini CLI. We are setting up the context for our chat.\nToday's date is Wednesday, June 24, 2026 (formatted according to the user's locale).\nMy operating system is: linux\nThe project's temporary directory is: /home/claude/.gemini/tmp/pr-review-yubf54\n- **Workspace Directories:**\n  - /tmp/pr-review-yUbf54\n- **Directory Structure:**\n\nShowing up to 200 items (files + folders).\n\n/tmp/pr-review-yUbf54/\n\n\n\n</session_context>"
        }
      ]
    },
    {
      "role": "user",
      "parts": [
        {
          "text": "You are re-reviewing PR #22: \"feat(seo): add metadata and schema foundation\" after the author pushed changes to address your prior review.\n\n## Your Prior Review Comments\n1. `src/app/services/psychiatry/[slug]/page.tsx:undefined`: [nitpick] Consider using the `slug` variable directly from `params` (e.g., `` `/services/psychiatry/${slug}/` ``) instead of `data.slug` for the path and `currentPath` props. It is slightly safer as it guarantees a value and doesn't rely on the `servicePageContent` dictionary objects explicitly defining a `slug` property.\n2. `src/app/services/therapy/[slug]/page.tsx:undefined`: [nitpick] Same as above: consider using `slug` from `params` rather than `data.slug` to avoid tight coupling to the data object's shape.\n3. `src/app/services/tms/[slug]/page.tsx:undefined`: [nitpick] Same as above: consider using `slug` from `params` rather than `data.slug`.\n\n## Prior Summary\n🤖 **Gemini Code Review**\n\nThis PR lays an excellent foundation for SEO improvements. It successfully centralizes metadata generation, adds comprehensive JSON-LD structured data (Organization, WebSite, Breadcrumb, LocalBusiness/MedicalClinic, and BlogPosting), and fixes sitemap omissions. The code is clean, type-safe, and correctly defers the Local SEO/NAP (Name, Address, Phone) updates until the correct authoritative public numbers are verified. No blocking issues were found.\n\n## Unresolved Threads\nWould approve code changes, but 8 unresolved review thread(s) remain:\n- **gautam-chatgpt** on `src/data/seo.ts:35`: [suggestion] `buildSeoMetadata` always emits `openGraph.type: 'website'`, includ...\n- **gautam-chatgpt** on `src/data/seo.ts:40`: [suggestion] The helper declares every OG image as `1200x630`, but callers pass ...\n- **gautam-chatgpt** on `src/data/seo.ts:118`: [suggestion] Both location JSON-LD entries use the same `url` and do not define ...\n- **gautam-chatgpt** on `src/data/seo.ts:39`: [suggestion] `buildSeoMetadata` declares every page image as `1200x630`, but man...\n- **gautam-chatgpt** on `src/data/seo.ts:116`: [suggestion] `BlogPosting.publisher` references the organization by `@id`, but G...\n\n\n## Workflow Suggestions\n- 💡 Great job detailing the SEO plan in `SEO-IMPROVEMENT-PLAN.md`! For Phase 2 (NAP cleanup), consider introducing a custom test script or a lint rule to prevent developers from accidentally hardcoding phone numbers back into page components once they are successfully centralized in `site-config.ts`.\n\n\n## Current Diff (after changes)\n```diff\nFile: SEO-IMPROVEMENT-PLAN.md (added, +243/-0)\n@@ -0,0 +1,243 @@\n+# Exult Healthcare SEO Improvement Plan\n+\n+Date: 2026-06-24\n+Branch: `codex/seo-improvement-plan`\n+\n+## Scope\n+\n+This branch proposes the broader SEO roadmap and implements the Phase 1 technical foundation for the Exult Healthcare Next.js marketing site. The audit covered:\n+\n+- App Router routes under `src/app/`\n+- Global and page metadata\n+- `robots.ts` and `sitemap.ts`\n+- Blog, service, location, and provider content data\n+- Public images and local SEO contact details\n+\n+## Current Baseline\n+\n+The site already has a solid starting point:\n+\n+- Global metadata is defined in `src/app/layout.tsx`.\n+- `robots.ts` allows indexing and points to `/sitemap.xml`.\n+- `sitemap.ts` includes static pages plus dynamic blog, service subpage, and team profile URLs.\n+- Most service pages export title and description metadata.\n+- Blog posts are statically generated from `src/data/blog-posts.ts`.\n+- Analytics are already wired through Vercel Analytics, PostHog, and GTM.\n+\n+## Priority Findings\n+\n+### P0: Fix Sitemap and Indexing Accuracy\n+\n+Three live standalone service routes are currently excluded from the generated sitemap because they are listed as standalone service slugs but not included in the static route list:\n+\n+- `/services/iop/`\n+- `/services/php/`\n+- `/services/psychiatric-urgent-care/`\n+\n+Other indexing decisions need explicit handling:\n+\n+- `/new-patient-form/` is a live page but has no metadata and is not in the sitemap.\n+- `/referral-form/` permanently redirects to `/referrals/`; it should stay out of the sitemap.\n+- `/patient-survey/` is in the sitemap, but it may be better as `noindex` if it is intended for existing patients rather than search acquisition.\n+\n+Recommended first implementation:\n+\n+1. Add missing standalone service routes to `sitemap.ts`.\n+2. Replace `new Date()` sitemap timestamps with stable source-backed dates or a shared build date policy.\n+3. Decide whether forms and patient-only pages should be indexed, then add `robots` metadata accordingly.\n+\n+### P0: Resolve NAP Consistency Before Local SEO Work\n+\n+The repo contains conflicting public phone numbers:\n+\n+- Shared site config and header: `(972) 369-4220`\n+- Many service/form/legal pages: `(469) 714-0006`\n+\n+Hours also vary between pages. This should be resolved before structured data and local landing pages are published.\n+\n+Recommended first implementation:\n+\n+1. Confirm the authoritative public phone number, phone purpose, and hours.\n+2. Move all public NAP details into `src/data/site-config.ts` and `src/data/locations.ts`.\n+3. Replace hard-coded phone/address/hour strings in pages and service content.\n+4. Add a simple test or script that flags hard-coded stale phone numbers.\n+\n+### P1: Add Complete Metadata Defaults\n+\n+Current metadata is useful but thin:\n+\n+- No canonical URL policy is expressed through `alternates.canonical`.\n+- Open Graph metadata lacks page URLs and images.\n+- Twitter card metadata is missing.\n+- Several pages only provide a title: Blog, FAQ, Privacy Policy, Terms of Use, HIPAA Notice.\n+- Dynamic blog and provider pages have minimal metadata and no social image.\n+\n+Recommended implementation:\n+\n+1. Add shared SEO helpers for canonical URL, title, description, Open Graph, and Twitter cards.\n+2. Define a default share image under `public/images/`.\n+3. Add route-aware metadata for every indexable page.\n+4. Add article metadata for blog posts using title, excerpt, date, category, and featured image.\n+5. Add provider metadata descriptions using role and bio excerpts.\n+\n+### P1: Add Structured Data\n+\n+The site currently appears to have no first-party JSON-LD. Add schema in phases:\n+\n+1. Sitewide `Organization`, `WebSite`, and healthcare/local business schema.\n+2. `MedicalClinic` or `LocalBusiness` entries for McKinney and Sherman locations.\n+3. `BreadcrumbList` for pages that render breadcrumbs.\n+4. `BlogPosting` for blog detail pages.\n+5. `FAQPage` for FAQ pages only after content is reviewed for eligibility and accuracy.\n+6. Service page schema for core services where clinical claims are stable and reviewed.\n+\n+### P1: Build Local Landing Pages\n+\n+The locations page lists McKinney and Sherman, but there are no dedicated city/location pages. For local search, create focused pages such as:\n+\n+- `/locations/mckinney/`\n+- `/locations/sherman/`\n+- Optional service-location pages after content review, for example `/services/tms/mckinney/` or `/services/therapy/mckinney/`\n+\n+Each location page should include:\n+\n+- Unique clinic copy, address, phone, hours, parking/access details, service availability, and map.\n+- Location-specific title/description/canonical metadata.\n+- Location schema with coordinates and sameAs links to the corresponding Google Business Profile if available.\n+- Internal links to relevant services and forms.\n+\n+### P2: Improve Blog SEO Hygiene\n+\n+The blog has many posts and images, but the content model is basic:\n+\n+- No `updatedAt`, `author`, `tags`, `readingTime`, or canonical override fields.\n+- Posts use HTML strings, and some older posts have inconsistent heading/paragraph structure.\n+- Blog index metadata has only a title.\n+- Pagination is client-side via query string and does not expose strong server-rendered category/topic archive pages.\n+\n+Recommended implementation:\n+\n+1. Extend the `BlogPost` type with optional SEO fields.\n+2. Add `BlogPosting` schema and Open Graph image support.\n+3. Add curated topic/category landing pages for high-value clusters such as TMS, IOP, psychiatry, therapy, anxiety, depression, and addiction treatment.\n+4. Add internal links from blog posts to relevant service and location pages.\n+5. Normalize older post HTML where it causes poor heading hierarchy or malformed snippets.\n+\n+### P2: Strengthen Service Page Search Targeting\n+\n+Service pages have good breadth, but many target broad terms without local modifiers or structured internal linking. Recommended improvements:\n+\n+1. Add location-aware copy blocks to core service pages where clinically accurate.\n+2. Add FAQ sections to high-intent pages such as TMS, IOP, PHP, MAT, psychiatry, and therapy.\n+3. Add related service links and blog links below each service page.\n+4. Create a shared service SEO content model so metadata, sitemap inclusion, breadcrumbs, and schema do not drift.\n+\n+### P2: Image and Social Preview Improvements\n+\n+Public blog images are frequently 600-850 KB. Several hero backgrounds are CSS background images, so they do not get the same optimization and alt-text benefits as `next/image`.\n+\n+Recommended implementation:\n+\n+1. Add a default 1200x630 Open Graph image.\n+2. Compress large blog and service images where quality remains acceptable.\n+3. Prefer Next `<Image>` for important above-the-fold visuals where feasible.\n+4. Keep decorative background images out of accessibility text, but ensure primary informational images have meaningful alt text.\n+\n+## Proposed Implementation Sequence\n+\n+### Phase 1: Technical SEO Foundation\n+\n+Goal: Fix indexation, metadata, and schema basics without changing visible content.\n+\n+- Add shared SEO constants/helpers.\n+- Fix sitemap omissions.\n+- Add canonical, Open Graph, Twitter, and description metadata coverage.\n+- Add sitewide organization/location JSON-LD after NAP confirmation.\n+- Add noindex rules for pages the business does not want in search.\n+\n+Verification:\n+\n+- `pnpm build`\n+- `pnpm typecheck`\n+- Inspect `/sitemap.xml` and `/robots.txt`\n+- Validate rendered JSON-LD with Google Rich Results Test or Schema.org validator\n+\n+### Phase 2: Local SEO and NAP Cleanup\n+\n+Goal: Make local search signals consistent and useful.\n+\n+- Centralize phone, email, hours, addresses, and map URLs.\n+- Replace hard-coded phone/address/hour strings.\n+- Add McKinney and Sherman location pages.\n+- Add location-specific schema and internal links.\n+\n+Verification:\n+\n+- Search repo for stale phone/address strings.\n+- Compare site NAP against Google Business Profile and production footer/header.\n+- Confirm desktop and mobile rendering for new location pages.\n+\n+### Phase 3: Service and Content Cluster Expansion\n+\n+Goal: Improve rankings for high-intent searches.\n+\n+- Add FAQ sections to priority service pages.\n+- Add related services/blog internal linking.\n+- Build city-service pages only where service availability is confirmed.\n+- Create blog category/topic landing pages.\n+\n+Verification:\n+\n+- Clinical/business review of claims.\n+- Build/typecheck.\n+- Manual preview review for mobile and desktop.\n+\n+### Phase 4: Blog Metadata and Content Cleanup\n+\n+Goal: Make the existing blog library easier for search engines and patients to understand.\n+\n+- Extend blog data with author, updated date, tags, and optional SEO fields.\n+- Add BlogPosting schema.\n+- Normalize older posts with malformed HTML and weak heading hierarchy.\n+- Add related post/service links.\n+\n+Verification:\n+\n+- Build all static blog pages.\n+- Spot-check representative old and new posts.\n+- Validate article schema.\n+\n+### Phase 5: Image and Performance Pass\n+\n+Goal: Improve share previews and page performance without visual regression.\n+\n+- Add default OG image and per-post OG images.\n+- Compress oversized images.\n+- Review LCP images on homepage and service pages.\n+- Keep Vercel Speed Insights and Search Console monitoring after deploy.\n+\n+Verification:\n+\n+- Compare Lighthouse/PageSpeed before and after on homepage, services, blog post, and location pages.\n+- Confirm social previews with Facebook/LinkedIn/Twitter preview tools.\n+\n+## Decisions Needed Before Implementation\n+\n+1. Which phone number is authoritative for public website SEO: `(972) 369-4220`, `(469) 714-0006`, or separate numbers by workflow?\n+2. What are the authoritative public hours for each location and for referrals/new patients?\n+3. Should `/new-patient-form/`, `/patient-survey/`, legal pages, and HIPAA notice be indexed?\n+4. Are there Google Business Profile URLs for McKinney and Sherman that should be added as `sameAs` links?\n+5. Which services are offered at each location?\n+6. Who should review clinical claims before FAQ/service content is expanded?\n+\n+## Recommended First PR\n+\n+Start with a focused technical SEO PR:\n+\n+- Fix sitemap omissions.\n+- Add metadata descriptions to thin pages.\n+- Add canonical/Open Graph/Twitter defaults.\n+- Add a default OG image.\n+- Add noindex only for pages explicitly approved as non-indexable.\n+\n+Defer phone changes and local schema until NAP details are confirmed.\n\nFile: src/app/about-us/careers/page.tsx (modified, +6/-3)\n@@ -1,10 +1,13 @@\n import type { Metadata } from 'next';\n import BreadcrumbNav from '@/components/shared/BreadcrumbNav';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Careers',\n-  description: 'Join the Exult Healthcare team. Explore career opportunities and open positions.',\n-};\n+  description: 'Join the Exult Healthcare team. Explore behavioral health career opportunities and open positions in North Texas.',\n+  path: '/about-us/careers/',\n+  imagePath: '/images/career-opportunities.jpg',\n+});\n \n export default function CareersPage() {\n   return (\n\nFile: src/app/about-us/faq/page.tsx (modified, +7/-1)\n@@ -1,8 +1,14 @@\n import type { Metadata } from 'next';\n import { faqItems } from '@/data/faq';\n import FAQList from '@/components/shared/FAQList';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = { title: 'FAQ' };\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'Frequently Asked Questions',\n+  description:\n+    'Find answers to common questions about Exult Healthcare, mental health treatment, psychiatry, therapy, TMS, insurance, and appointments.',\n+  path: '/about-us/faq/',\n+});\n \n export default function FAQPage() {\n   return (\n\nFile: src/app/about-us/meet-the-team/[slug]/page.tsx (modified, +19/-1)\n@@ -3,6 +3,9 @@ import Image from 'next/image';\n import Link from 'next/link';\n import { notFound } from 'next/navigation';\n import { teamMembers } from '@/data/team-members';\n+import { buildSeoMetadata } from '@/data/seo';\n+import JsonLd from '@/components/seo/JsonLd';\n+import { breadcrumbJsonLd } from '@/data/seo';\n \n export function generateStaticParams() {\n   return teamMembers.map((member) => ({ slug: member.slug }));\n@@ -11,7 +14,14 @@ export function generateStaticParams() {\n export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n   const { slug } = await params;\n   const member = teamMembers.find((m) => m.slug === slug);\n-  return member ? { title: member.credentials ? `${member.name}, ${member.credentials}` : member.name } : {};\n+  return member\n+    ? buildSeoMetadata({\n+        title: member.credentials ? `${member.name}, ${member.credentials}` : member.name,\n+        description: `${member.name} is part of the Exult Healthcare team. Learn about their role, background, and approach to behavioral health care.`,\n+        path: `/about-us/meet-the-team/${member.slug}/`,\n+        imagePath: member.image,\n+      })\n+    : {};\n }\n \n export default async function TeamMemberPage({ params }: { params: Promise<{ slug: string }> }) {\n@@ -21,6 +31,14 @@ export default async function TeamMemberPage({ params }: { params: Promise<{ slu\n \n   return (\n     <div className=\"container py-5\">\n+      <JsonLd\n+        data={breadcrumbJsonLd([\n+          { name: 'Home', path: '/' },\n+          { name: 'About Us', path: '/about-us/' },\n+          { name: 'Meet the Team', path: '/about-us/meet-the-team/' },\n+          { name: member.name, path: `/about-us/meet-the-team/${member.slug}/` },\n+        ])}\n+      />\n       <nav aria-label=\"breadcrumb\" className=\"mb-4\">\n         <ol className=\"breadcrumb\">\n           <li className=\"breadcrumb-item\"><Link href=\"/\">Home</Link></li>\n\nFile: src/app/about-us/meet-the-team/page.tsx (modified, +5/-2)\n@@ -2,11 +2,14 @@ import type { Metadata } from 'next';\n import Image from 'next/image';\n import Link from 'next/link';\n import { teamMembers } from '@/data/team-members';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Meet the Team',\n   description: 'Meet the compassionate and experienced mental health professionals at Exult Healthcare serving North Texas.',\n-};\n+  path: '/about-us/meet-the-team/',\n+  imagePath: '/images/team/deepika-bhargava.png',\n+});\n \n export default function MeetTheTeamPage() {\n   return (\n\nFile: src/app/about-us/page.tsx (modified, +5/-2)\n@@ -13,11 +13,14 @@ import {\n   respectSection,\n   serviceAreas,\n } from '@/data/about-content';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'About Us',\n   description: 'Learn about Exult Healthcare — our mission, vision, values, and commitment to providing compassionate behavioral health care in North Texas.',\n-};\n+  path: '/about-us/',\n+  imagePath: '/images/the-exult-experience.jpg',\n+});\n \n export default function AboutUsPage() {\n   return (\n\nFile: src/app/blog/[slug]/page.tsx (modified, +24/-1)\n@@ -3,6 +3,8 @@ import Image from 'next/image';\n import Link from 'next/link';\n import { notFound } from 'next/navigation';\n import { blogPosts } from '@/data/blog-posts';\n+import JsonLd from '@/components/seo/JsonLd';\n+import { blogPostJsonLd, breadcrumbJsonLd, buildSeoMetadata, normalizeIsoDate } from '@/data/seo';\n \n export function generateStaticParams() {\n   return blogPosts.map((post) => ({ slug: post.slug }));\n@@ -11,7 +13,18 @@ export function generateStaticParams() {\n export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n   const { slug } = await params;\n   const post = blogPosts.find((p) => p.slug === slug);\n-  return post ? { title: post.title, description: post.excerpt } : {};\n+  return post\n+    ? buildSeoMetadata({\n+        title: post.title,\n+        description: post.excerpt,\n+        path: `/blog/${post.slug}/`,\n+        imagePath: post.featuredImage,\n+        imageAlt: post.title,\n+        openGraphType: 'article',\n+        publishedTime: normalizeIsoDate(post.date),\n+        section: post.category,\n+      })\n+    : {};\n }\n \n export default async function BlogPostPage({ params }: { params: Promise<{ slug: string }> }) {\n@@ -23,6 +36,16 @@ export default async function BlogPostPage({ params }: { params: Promise<{ slug:\n \n   return (\n     <div className=\"container py-5\">\n+      <JsonLd\n+        data={[\n+          blogPostJsonLd(post),\n+          breadcrumbJsonLd([\n+            { name: 'Home', path: '/' },\n+            { name: 'Blog', path: '/blog/' },\n+            { name: post.title, path: `/blog/${post.slug}/` },\n+          ]),\n+        ]}\n+      />\n       <div className=\"row\">\n         <div className=\"col-lg-8\">\n           <nav aria-label=\"breadcrumb\" className=\"mb-3\">\n\nFile: src/app/blog/page.tsx (modified, +7/-1)\n@@ -2,8 +2,14 @@ import type { Metadata } from 'next';\n import { Suspense } from 'react';\n import { blogPosts } from '@/data/blog-posts';\n import BlogGrid from '@/components/blog/BlogGrid';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = { title: 'Blog' };\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'Mental Health Blog',\n+  description:\n+    'Read Exult Healthcare articles about psychiatry, therapy, TMS, addiction treatment, anxiety, depression, and mental wellness.',\n+  path: '/blog/',\n+});\n \n export default function BlogPage() {\n   return (\n\nFile: src/app/contact/page.tsx (modified, +4/-2)\n@@ -2,11 +2,13 @@ import type { Metadata } from 'next';\n import { locations } from '@/data/locations';\n import { sitePhone } from '@/data/site-config';\n import ContactForm from '@/components/shared/ContactForm';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Contact Us',\n   description: 'Contact Exult Healthcare to schedule an appointment or learn more about our mental health services in McKinney and Sherman, Texas.',\n-};\n+  path: '/contact/',\n+});\n \n export default function ContactPage() {\n   return (\n\nFile: src/app/hipaa-notice/page.tsx (modified, +7/-1)\n@@ -1,6 +1,12 @@\n import type { Metadata } from 'next';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = { title: 'HIPAA Notice' };\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'HIPAA Notice of Privacy Practices',\n+  description:\n+    'Read the Exult Healthcare HIPAA Notice of Privacy Practices for protected health information and patient privacy rights.',\n+  path: '/hipaa-notice/',\n+});\n \n export default function HipaaNoticePage() {\n   return (\n\nFile: src/app/insurance-billing-info/page.tsx (modified, +6/-3)\n@@ -1,10 +1,13 @@\n import type { Metadata } from 'next';\n import Image from 'next/image';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Insurance & Fees',\n-  description: 'Exult Healthcare accepts most major insurance plans. See our accepted insurance providers.',\n-};\n+  description:\n+    'Review insurance and billing information for Exult Healthcare, including accepted behavioral health insurance providers.',\n+  path: '/insurance-billing-info/',\n+});\n \n const insuranceProviders = [\n   { name: 'Aetna Medicare Solutions', logo: '/images/insurance/aetna.webp' },\n\nFile: src/app/layout.tsx (modified, +24/-4)\n@@ -10,6 +10,9 @@ import SiteNavbar from \"@/components/layout/Navbar\";\n import Footer from \"@/components/layout/Footer\";\n import { PostHogProvider } from \"@/components/PostHogProvider\";\n import { PostHogPageView } from \"@/components/PostHogPageView\";\n+import JsonLd from \"@/components/seo/JsonLd\";\n+import { organizationJsonLd, websiteJsonLd, absoluteUrl } from \"@/data/seo\";\n+import { siteConfig } from \"@/data/site-config\";\n \n const lato = Lato({\n   variable: \"--font-lato\",\n@@ -18,18 +21,34 @@ const lato = Lato({\n });\n \n export const metadata: Metadata = {\n-  metadataBase: new URL(\"https://exulthealthcare.com\"),\n+  metadataBase: new URL(siteConfig.url),\n+  applicationName: siteConfig.name,\n   title: {\n     template: \"%s | Exult Healthcare\",\n     default: \"Exult Healthcare: Psychiatry, Mental Health, TMS, Therapy In Texas\",\n   },\n-  description:\n-    \"Exult Healthcare is Dallas/Fort Worth's premier innovative integrated behavioral health and addiction treatment center offering psychiatry, therapy, TMS, and more.\",\n+  description: siteConfig.description,\n   keywords: [\"psychiatry\", \"mental health\", \"TMS\", \"therapy\", \"counseling\", \"Dallas\", \"Fort Worth\", \"McKinney\", \"Sherman\", \"Texas\"],\n   openGraph: {\n     type: \"website\",\n     locale: \"en_US\",\n-    siteName: \"Exult Healthcare\",\n+    siteName: siteConfig.name,\n+    title: \"Exult Healthcare: Psychiatry, Mental Health, TMS, Therapy In Texas\",\n+    description: siteConfig.description,\n+    images: [\n+      {\n+        url: absoluteUrl(siteConfig.defaultOgImagePath),\n+        width: 1200,\n+        height: 630,\n+        alt: siteConfig.name,\n+      },\n+    ],\n+  },\n+  twitter: {\n+    card: \"summary_large_image\",\n+    title: \"Exult Healthcare: Psychiatry, Mental Health, TMS, Therapy In Texas\",\n+    description: siteConfig.description,\n+    images: [absoluteUrl(siteConfig.defaultOgImagePath)],\n   },\n   robots: { index: true, follow: true },\n };\n@@ -48,6 +67,7 @@ export default function RootLayout({\n           crossOrigin=\"anonymous\"\n           referrerPolicy=\"no-referrer\"\n         />\n+        <JsonLd data={[organizationJsonLd(), websiteJsonLd()]} />\n       </head>\n       {process.env.NEXT_PUBLIC_GTM_ID && <GoogleTagManager gtmId={process.env.NEXT_PUBLIC_GTM_ID} />}\n       <body className={lato.variable}>\n\nFile: src/app/locations/page.tsx (modified, +8/-3)\n@@ -1,15 +1,19 @@\n import type { Metadata } from 'next';\n import { locations } from '@/data/locations';\n import { sitePhone } from '@/data/site-config';\n+import JsonLd from '@/components/seo/JsonLd';\n+import { buildSeoMetadata, locationsJsonLd } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Locations',\n   description: 'Find Exult Healthcare near you. We have locations in McKinney and Sherman, Texas serving North Texas and Southern Oklahoma.',\n-};\n+  path: '/locations/',\n+});\n \n export default function LocationsPage() {\n   return (\n     <>\n+      <JsonLd data={locationsJsonLd(locations)} />\n       {/* Page Title */}\n       <section className=\"py-5\">\n         <div className=\"container\">\n@@ -27,9 +31,10 @@ export default function LocationsPage() {\n             const fullAddress = `${loc.address}, ${loc.city}, ${loc.state} ${loc.zip}`;\n             const mapQuery = `Exult Healthcare, ${fullAddress}`;\n             const directionsUrl = `https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(fullAddress)}`;\n+            const locationId = loc.city.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n \n             return (\n-              <div key={loc.name} className=\"row g-4 mb-4 align-items-stretch\">\n+              <div key={loc.name} id={locationId} className=\"row g-4 mb-4 align-items-stretch\">\n                 <div className=\"col-lg-4\">\n                   <div className=\"bg-light p-4 rounded h-100 d-flex flex-column justify-content-center\">\n                     <h2 className=\"h5 mb-3\">{loc.name}</h2>\n\nFile: src/app/new-patient-form/layout.tsx (added, +17/-0)\n@@ -0,0 +1,17 @@\n+import type { Metadata } from 'next';\n+import { buildSeoMetadata } from '@/data/seo';\n+\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'New Patient Intake Form',\n+  description:\n+    'Start as a new patient with Exult Healthcare. Complete the intake form and our team will contact you to schedule your first appointment.',\n+  path: '/new-patient-form/',\n+});\n+\n+export default function NewPatientFormLayout({\n+  children,\n+}: Readonly<{\n+  children: React.ReactNode;\n+}>) {\n+  return children;\n+}\n\nFile: src/app/page.tsx (modified, +15/-0)\n@@ -1,3 +1,4 @@\n+import type { Metadata } from 'next';\n import HeroBanner from '@/components/homepage/HeroBanner';\n import JourneySection from '@/components/homepage/JourneySection';\n import StatsBar from '@/components/homepage/StatsBar';\n@@ -11,6 +12,20 @@ import ValuesGrid from '@/components/homepage/ValuesGrid';\n import InsuranceLogos from '@/components/homepage/InsuranceLogos';\n import ContactCTA from '@/components/homepage/ContactCTA';\n import { parallaxSections } from '@/data/homepage-content';\n+import { buildSeoMetadata } from '@/data/seo';\n+\n+const homeTitle = 'Exult Healthcare: Psychiatry, Mental Health, TMS, Therapy In Texas';\n+\n+export const metadata: Metadata = {\n+  ...buildSeoMetadata({\n+    title: homeTitle,\n+    description:\n+      'Exult Healthcare provides integrated behavioral health, psychiatry, therapy, TMS, addiction treatment, and mental health services in North Texas.',\n+    path: '/',\n+    imagePath: '/images/Banner-bg.jpg',\n+  }),\n+  title: { absolute: homeTitle },\n+};\n \n export default function Home() {\n   return (\n\nFile: src/app/patient-survey/page.tsx (modified, +4/-2)\n@@ -2,11 +2,13 @@ import type { Metadata } from 'next';\n import Link from 'next/link';\n import BreadcrumbNav from '@/components/shared/BreadcrumbNav';\n import SectionHeading from '@/components/shared/SectionHeading';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Patient Survey',\n   description: 'Share your feedback about your experience at Exult Healthcare. Your input helps us continue to improve our services.',\n-};\n+  path: '/patient-survey/',\n+});\n \n export default function PatientSurveyPage() {\n   return (\n\nFile: src/app/privacy-policy/page.tsx (modified, +8/-2)\n@@ -1,6 +1,12 @@\n import type { Metadata } from 'next';\n-\n-export const metadata: Metadata = { title: 'Privacy Policy' };\n+import { buildSeoMetadata } from '@/data/seo';\n+\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'Privacy Policy',\n+  description:\n+    'Review the Exult Healthcare privacy policy for website visitors, patient communications, data collection, and privacy rights.',\n+  path: '/privacy-policy/',\n+});\n \n export default function PrivacyPolicyPage() {\n   return (\n\nFile: src/app/referrals/page.tsx (modified, +4/-2)\n@@ -1,10 +1,12 @@\n import type { Metadata } from 'next';\n import ReferralForm from '@/components/shared/ReferralForm';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Referrals',\n   description: 'Refer a patient to Exult Healthcare for mental health services in North Texas.',\n-};\n+  path: '/referrals/',\n+});\n \n export default function ReferralsPage() {\n   return (\n\nFile: src/app/services/iop/page.tsx (modified, +6/-2)\n@@ -1,13 +1,16 @@\n import type { Metadata } from 'next';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const data = servicePageContent['iop'];\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: data.title,\n   description: data.metaDescription,\n-};\n+  path: '/services/iop/',\n+  imagePath: data.heroImage,\n+});\n \n export default function IOPPage() {\n   return (\n@@ -20,6 +23,7 @@ export default function IOPPage() {\n         { label: 'Services', href: '/services/' },\n         { label: 'IOP', href: '#' },\n       ]}\n+      currentPath=\"/services/iop/\"\n     />\n   );\n }\n\nFile: src/app/services/medication-assisted-treatment/page.tsx (modified, +5/-2)\n@@ -1,11 +1,14 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n import FAQList from '@/components/shared/FAQList';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Medication-Assisted Treatment (MAT)',\n   description: 'Medication-Assisted Treatment (MAT) is the use of FDA-approved medications, in combination with counseling and behavioral therapies, to provide a whole-patient approach to the treatment of substance use disorders.',\n-};\n+  path: '/services/medication-assisted-treatment/',\n+  imagePath: '/images/services/Addiction-Treatment.png',\n+});\n \n const faqItems = [\n   {\n\nFile: src/app/services/page.tsx (modified, +5/-2)\n@@ -3,11 +3,14 @@ import Image from 'next/image';\n import Link from 'next/link';\n import BreadcrumbNav from '@/components/shared/BreadcrumbNav';\n import SectionHeading from '@/components/shared/SectionHeading';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Services',\n   description: 'Exult Healthcare offers mental health services in Texas including psychiatry, therapy, TMS, weight loss management, and yoga and mindfulness.',\n-};\n+  path: '/services/',\n+  imagePath: '/images/psychiatric-services.png',\n+});\n \n const services = [\n   {\n\nFile: src/app/services/php/page.tsx (modified, +6/-2)\n@@ -1,13 +1,16 @@\n import type { Metadata } from 'next';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const data = servicePageContent['php'];\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: data.title,\n   description: data.metaDescription,\n-};\n+  path: '/services/php/',\n+  imagePath: data.heroImage,\n+});\n \n export default function PHPPage() {\n   return (\n@@ -20,6 +23,7 @@ export default function PHPPage() {\n         { label: 'Services', href: '/services/' },\n         { label: 'PHP', href: '#' },\n       ]}\n+      currentPath=\"/services/php/\"\n     />\n   );\n }\n\nFile: src/app/services/psychiatric-urgent-care/page.tsx (modified, +6/-2)\n@@ -1,13 +1,16 @@\n import type { Metadata } from 'next';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const data = servicePageContent['psychiatric-urgent-care'];\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: data.title,\n   description: data.metaDescription,\n-};\n+  path: '/services/psychiatric-urgent-care/',\n+  imagePath: data.heroImage,\n+});\n \n export default function PsychiatricUrgentCarePage() {\n   return (\n@@ -20,6 +23,7 @@ export default function PsychiatricUrgentCarePage() {\n         { label: 'Services', href: '/services/' },\n         { label: 'Psychiatric Urgent Care', href: '#' },\n       ]}\n+      currentPath=\"/services/psychiatric-urgent-care/\"\n     />\n   );\n }\n\nFile: src/app/services/psychiatry/[slug]/page.tsx (modified, +10/-1)\n@@ -2,6 +2,7 @@ import type { Metadata } from 'next';\n import { notFound } from 'next/navigation';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const slugs = ['child-psychiatry', 'adolescent-psychiatry', 'adult-psychiatry', 'geriatric-psychiatry', 'telepsychiatry'];\n \n@@ -12,7 +13,14 @@ export function generateStaticParams() {\n export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n   const { slug } = await params;\n   const data = servicePageContent[slug];\n-  return data ? { title: data.title, description: data.metaDescription } : {};\n+  return data\n+    ? buildSeoMetadata({\n+        title: data.title,\n+        description: data.metaDescription,\n+        path: `/services/psychiatry/${slug}/`,\n+        imagePath: data.heroImage,\n+      })\n+    : {};\n }\n \n export default async function PsychiatrySubpage({ params }: { params: Promise<{ slug: string }> }) {\n@@ -30,6 +38,7 @@ export default async function PsychiatrySubpage({ params }: { params: Promise<{\n         { label: 'Psychiatry', href: '/services/psychiatry/' },\n         { label: data.title, href: '#' },\n       ]}\n+      currentPath={`/services/psychiatry/${slug}/`}\n     />\n   );\n }\n\nFile: src/app/services/psychiatry/page.tsx (modified, +5/-2)\n@@ -1,11 +1,14 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n import FAQList from '@/components/shared/FAQList';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Psychiatry Services',\n   description: 'Exult Healthcare offers supportive psychiatry services in Texas to treat depression, anxiety, substance abuse, and many additional mental health conditions.',\n-};\n+  path: '/services/psychiatry/',\n+  imagePath: '/images/services/Psychiatry-Services.png',\n+});\n \n const subServices = [\n   {\n\nFile: src/app/services/telehealth/page.tsx (modified, +5/-2)\n@@ -1,11 +1,14 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Telehealth Therapy in Texas',\n   description:\n     'Telehealth mental health services in Texas. Access telepsychiatry and teletherapy via secure video appointments from anywhere in Texas at Exult Healthcare.',\n-};\n+  path: '/services/telehealth/',\n+  imagePath: '/images/services/Therapy-Counseling.png',\n+});\n \n export default function TelehealthPage() {\n   return (\n\nFile: src/app/services/therapy/[slug]/page.tsx (modified, +10/-1)\n@@ -2,6 +2,7 @@ import type { Metadata } from 'next';\n import { notFound } from 'next/navigation';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const slugs = [\n   'anger-management', 'animal-assisted-therapy', 'art-therapy',\n@@ -18,7 +19,14 @@ export function generateStaticParams() {\n export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n   const { slug } = await params;\n   const data = servicePageContent[slug];\n-  return data ? { title: data.title, description: data.metaDescription } : {};\n+  return data\n+    ? buildSeoMetadata({\n+        title: data.title,\n+        description: data.metaDescription,\n+        path: `/services/therapy/${slug}/`,\n+        imagePath: data.heroImage,\n+      })\n+    : {};\n }\n \n export default async function TherapySubpage({ params }: { params: Promise<{ slug: string }> }) {\n@@ -36,6 +44,7 @@ export default async function TherapySubpage({ params }: { params: Promise<{ slu\n         { label: 'Therapy', href: '/services/therapy/' },\n         { label: data.title, href: '#' },\n       ]}\n+      currentPath={`/services/therapy/${slug}/`}\n     />\n   );\n }\n\nFile: src/app/services/therapy/page.tsx (modified, +5/-2)\n@@ -1,11 +1,14 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n import FAQList from '@/components/shared/FAQList';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Therapy Services',\n   description: 'Multiple types of therapies offered by specialized licensed professionals from art, equine, to individual therapy at Exult Healthcare in Texas.',\n-};\n+  path: '/services/therapy/',\n+  imagePath: '/images/services/Therapy-Counseling.png',\n+});\n \n const therapyTypes = [\n   {\n\nFile: src/app/services/tms/[slug]/page.tsx (modified, +10/-1)\n@@ -2,6 +2,7 @@ import type { Metadata } from 'next';\n import { notFound } from 'next/navigation';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const slugs = [\n   'typical-treatment', 'is-tms-right-for-me', 'tms-saint-tms-and-accelerated-tms',\n@@ -17,7 +18,14 @@ export function generateStaticParams() {\n export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n   const { slug } = await params;\n   const data = servicePageContent[slug];\n-  return data ? { title: data.title, description: data.metaDescription } : {};\n+  return data\n+    ? buildSeoMetadata({\n+        title: data.title,\n+        description: data.metaDescription,\n+        path: `/services/tms/${slug}/`,\n+        imagePath: data.heroImage,\n+      })\n+    : {};\n }\n \n export default async function TMSSubpage({ params }: { params: Promise<{ slug: string }> }) {\n@@ -35,6 +43,7 @@ export default async function TMSSubpage({ params }: { params: Promise<{ slug: s\n         { label: 'TMS', href: '/services/tms/' },\n         { label: data.title, href: '#' },\n       ]}\n+      currentPath={`/services/tms/${slug}/`}\n     />\n   );\n }\n\nFile: src/app/services/tms/page.tsx (modified, +5/-2)\n@@ -1,10 +1,13 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'TMS Therapy',\n   description: 'Transcranial Magnetic Stimulation (TMS) is an FDA-approved, non-invasive treatment for Major Depressive Disorder, Treatment-Resistant Depression, PTSD, OCD, Anxiety, and other mood disorders at Exult Healthcare.',\n-};\n+  path: '/services/tms/',\n+  imagePath: '/images/services/TMS-Therapy.png',\n+});\n \n const subServices = [\n   { slug: 'typical-treatment', label: 'Typical Treatment' },\n\nFile: src/app/services/weight-loss-management/page.tsx (modified, +5/-2)\n@@ -1,11 +1,14 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n import FAQAccordion from '@/components/shared/FAQAccordion';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Weight Loss Management',\n   description: 'A comprehensive, integrated approach to weight guidance from a medical, nutritional, exercise, behavioral and lifestyle change at Exult Healthcare.',\n-};\n+  path: '/services/weight-loss-management/',\n+  imagePath: '/images/services/healty-palace-fixed.jpg',\n+});\n \n const serviceAccordionItems = [\n   {\n\nFile: src/app/services/yoga-and-mindfulness/page.tsx (modified, +5/-2)\n@@ -2,12 +2,15 @@ import type { Metadata } from 'next';\n import Link from 'next/link';\n import Image from 'next/image';\n import FAQList from '@/components/shared/FAQList';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Yoga and Mindfulness',\n   description:\n     'Yoga and mindfulness therapy in Dallas/Fort Worth. Integrate mind-body practices into your mental health treatment at Exult Healthcare for enhanced well-being and stress reduction.',\n-};\n+  path: '/services/yoga-and-mindfulness/',\n+  imagePath: '/images/services/Therapy-Counseling.png',\n+});\n \n const faqItems = [\n   {\n\nFile: src/app/sitemap.ts (modified, +3/-5)\n@@ -8,15 +8,15 @@ const BASE_URL = 'https://exulthealthcare.com';\n export default function sitemap(): MetadataRoute.Sitemap {\n   const staticPages = [\n     '', '/about-us/', '/about-us/meet-the-team/', '/about-us/careers/', '/about-us/faq/',\n-    '/contact/', '/locations/', '/services/', '/blog/', '/referrals/',\n+    '/contact/', '/locations/', '/new-patient-form/', '/services/', '/blog/', '/referrals/',\n     '/insurance-billing-info/', '/patient-survey/', '/terms-of-use/', '/privacy-policy/',\n     '/hipaa-notice/',\n     '/services/psychiatry/', '/services/therapy/', '/services/tms/',\n     '/services/medication-assisted-treatment/', '/services/weight-loss-management/',\n-    '/services/yoga-and-mindfulness/', '/services/telehealth/',\n+    '/services/yoga-and-mindfulness/', '/services/telehealth/', '/services/iop/',\n+    '/services/php/', '/services/psychiatric-urgent-care/',\n   ].map((path) => ({\n     url: `${BASE_URL}${path}`,\n-    lastModified: new Date(),\n     changeFrequency: 'weekly' as const,\n     priority: path === '' ? 1 : 0.8,\n   }));\n@@ -39,7 +39,6 @@ export default function sitemap(): MetadataRoute.Sitemap {\n             : 'therapy';\n       return {\n         url: `${BASE_URL}/services/${category}/${page.slug}/`,\n-        lastModified: new Date(),\n         changeFrequency: 'monthly' as const,\n         priority: 0.7,\n       };\n@@ -54,7 +53,6 @@ export default function sitemap(): MetadataRoute.Sitemap {\n \n   const teamPages = teamMembers.map((member) => ({\n     url: `${BASE_URL}/about-us/meet-the-team/${member.slug}/`,\n-    lastModified: new Date(),\n     changeFrequency: 'monthly' as const,\n     priority: 0.6,\n   }));\n\nFile: src/app/terms-of-use/page.tsx (modified, +8/-2)\n@@ -1,6 +1,12 @@\n import type { Metadata } from 'next';\n-\n-export const metadata: Metadata = { title: 'Terms of Use Agreement' };\n+import { buildSeoMetadata } from '@/data/seo';\n+\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'Terms of Use Agreement',\n+  description:\n+    'Read the Exult Healthcare website terms of use, disclaimers, intellectual property notices, and permitted use guidelines.',\n+  path: '/terms-of-use/',\n+});\n \n export default function TermsPage() {\n   return (\n\nFile: src/components/seo/JsonLd.tsx (added, +14/-0)\n@@ -0,0 +1,14 @@\n+type JsonLdProps = {\n+  data: Record<string, unknown> | Record<string, unknown>[];\n+};\n+\n+export default function JsonLd({ data }: JsonLdProps) {\n+  return (\n+    <script\n+      type=\"application/ld+json\"\n+      dangerouslySetInnerHTML={{\n+        __html: JSON.stringify(data).replace(/</g, '\\\\u003c'),\n+      }}\n+    />\n+  );\n+}\n\nFile: src/components/services/ServicePageLayout.tsx (modified, +14/-1)\n@@ -1,15 +1,28 @@\n import Link from 'next/link';\n+import JsonLd from '@/components/seo/JsonLd';\n+import { breadcrumbJsonLd } from '@/data/seo';\n \n interface ServicePageLayoutProps {\n   title: string;\n   heroImage: string;\n   content: string;\n   breadcrumbs: { label: string; href: string }[];\n+  currentPath: string;\n }\n \n-export default function ServicePageLayout({ title, heroImage, content, breadcrumbs }: ServicePageLayoutProps) {\n+export default function ServicePageLayout({ title, heroImage, content, breadcrumbs, currentPath }: ServicePageLayoutProps) {\n+  const breadcrumbSchemaItems = breadcrumbs.map((crumb) => ({\n+    name: crumb.label,\n+    path: crumb.href === '#' ? currentPath : crumb.href,\n+  }));\n+  const schemaItems =\n+    breadcrumbSchemaItems[0]?.path === '/'\n+      ? breadcrumbSchemaItems\n+      : [{ name: 'Home', path: '/' }, ...breadcrumbSchemaItems];\n+\n   return (\n     <>\n+      <JsonLd data={breadcrumbJsonLd(schemaItems)} />\n       <section className=\"hero-banner\" style={{ backgroundImage: `url('${heroImage}')`, padding: '120px 0' }}>\n         <div className=\"container position-relative\" style={{ zIndex: 1 }}>\n           <h1>{title}</h1>\n\nFile: src/data/seo.ts (added, +213/-0)\n@@ -0,0 +1,213 @@\n+import type { Metadata } from 'next';\n+import type { BlogPost, Location } from '@/types';\n+import { siteConfig } from '@/data/site-config';\n+\n+type SeoMetadataOptions = {\n+  title: string;\n+  description: string;\n+  path: string;\n+  imagePath?: string;\n+  imageAlt?: string;\n+  imageWidth?: number;\n+  imageHeight?: number;\n+  openGraphType?: 'website' | 'article';\n+  publishedTime?: string;\n+  section?: string;\n+  noIndex?: boolean;\n+  noFollow?: boolean;\n+};\n+\n+type BreadcrumbItem = {\n+  name: string;\n+  path: string;\n+};\n+\n+export function absoluteUrl(path = '/'): string {\n+  if (/^https?:\\/\\//.test(path)) return path;\n+  return new URL(path, siteConfig.url).toString();\n+}\n+\n+export function buildSeoMetadata({\n+  title,\n+  description,\n+  path,\n+  imagePath = siteConfig.defaultOgImagePath,\n+  imageAlt = siteConfig.name,\n+  imageWidth,\n+  imageHeight,\n+  openGraphType = 'website',\n+  publishedTime,\n+  section,\n+  noIndex = false,\n+  noFollow = false,\n+}: SeoMetadataOptions): Metadata {\n+  const url = absoluteUrl(path);\n+  const imageUrl = absoluteUrl(imagePath);\n+  const image = {\n+    url: imageUrl,\n+    alt: imageAlt,\n+    ...(imageWidth && imageHeight ? { width: imageWidth, height: imageHeight } : {}),\n+  };\n+  const openGraph: Metadata['openGraph'] =\n+    openGraphType === 'article'\n+      ? {\n+          title,\n+          description,\n+          url,\n+          siteName: siteConfig.name,\n+          locale: 'en_US',\n+          type: 'article',\n+          publishedTime,\n+          section,\n+          images: [image],\n+        }\n+      : {\n+          title,\n+          description,\n+          url,\n+          siteName: siteConfig.name,\n+          locale: 'en_US',\n+          type: 'website',\n+          images: [image],\n+        };\n+\n+  return {\n+    title,\n+    description,\n+    alternates: {\n+      canonical: url,\n+    },\n+    openGraph,\n+    twitter: {\n+      card: 'summary_large_image',\n+      title,\n+      description,\n+      images: [imageUrl],\n+    },\n+    robots: { index: !noIndex, follow: !noFollow },\n+  };\n+}\n+\n+export function organizationJsonLd() {\n+  return {\n+    '@context': 'https://schema.org',\n+    '@type': 'MedicalOrganization',\n+    '@id': absoluteUrl('/#organization'),\n+    name: siteConfig.name,\n+    url: siteConfig.url,\n+    logo: absoluteUrl(siteConfig.logoPath),\n+    email: siteConfig.email,\n+    sameAs: siteConfig.socialLinks,\n+  };\n+}\n+\n+export function websiteJsonLd() {\n+  return {\n+    '@context': 'https://schema.org',\n+    '@type': 'WebSite',\n+    '@id': absoluteUrl('/#website'),\n+    name: siteConfig.name,\n+    url: siteConfig.url,\n+    publisher: {\n+      '@id': absoluteUrl('/#organization'),\n+    },\n+  };\n+}\n+\n+export function breadcrumbJsonLd(items: BreadcrumbItem[]) {\n+  return {\n+    '@context': 'https://schema.org',\n+    '@type': 'BreadcrumbList',\n+    itemListElement: items.map((item, index) => ({\n+      '@type': 'ListItem',\n+      position: index + 1,\n+      name: item.name,\n+      item: absoluteUrl(item.path),\n+    })),\n+  };\n+}\n+\n+export function blogPostJsonLd(post: BlogPost) {\n+  const postUrl = absoluteUrl(`/blog/${post.slug}/`);\n+  const imageUrl = absoluteUrl(post.featuredImage);\n+  const publishedDate = normalizeIsoDate(post.date);\n+\n+  return {\n+    '@context': 'https://schema.org',\n+    '@type': 'BlogPosting',\n+    mainEntityOfPage: postUrl,\n+    headline: post.title,\n+    description: post.excerpt,\n+    image: imageUrl,\n+    datePublished: publishedDate,\n+    author: {\n+      '@type': 'Organization',\n+      name: siteConfig.name,\n+      url: siteConfig.url,\n+    },\n+    publisher: {\n+      '@type': 'Organization',\n+      '@id': absoluteUrl('/#organization'),\n+      name: siteConfig.name,\n+      logo: {\n+        '@type': 'ImageObject',\n+        url: absoluteUrl(siteConfig.logoPath),\n+      },\n+    },\n+  };\n+}\n+\n+export function locationJsonLd(location: Location) {\n+  const address = `${location.address}, ${location.city}, ${location.state} ${location.zip}`;\n+  const locationPath = `/locations/#${slugifyLocationName(location.city)}`;\n+  const locationUrl = absoluteUrl(locationPath);\n+\n+  return {\n+    '@context': 'https://schema.org',\n+    '@type': 'MedicalClinic',\n+    '@id': locationUrl,\n+    name: `${siteConfig.name} - ${location.name}`,\n+    url: locationUrl,\n+    email: location.email,\n+    address: {\n+      '@type': 'PostalAddress',\n+      streetAddress: location.address,\n+      addressLocality: location.city,\n+      addressRegion: location.state,\n+      postalCode: location.zip,\n+      addressCountry: 'US',\n+    },\n+    geo: {\n+      '@type': 'GeoCoordinates',\n+      latitude: location.coordinates.lat,\n+      longitude: location.coordinates.lng,\n+    },\n+    hasMap: `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(\n+      `Exult Healthcare, ${address}`,\n+    )}`,\n+    parentOrganization: {\n+      '@id': absoluteUrl('/#organization'),\n+    },\n+  };\n+}\n+\n+export function locationsJsonLd(locationList: Location[]) {\n+  return {\n+    '@context': 'https://schema.org',\n+    '@graph': locationList.map((location) => {\n+      const node: Record<string, unknown> = { ...locationJsonLd(location) };\n+      delete node['@context'];\n+      return node;\n+    }),\n+  };\n+}\n+\n+export function normalizeIsoDate(date: string): string {\n+  const candidate = /^\\d{4}-\\d{2}-\\d{2}$/.test(date) ? `${date}T00:00:00.000Z` : date;\n+  const parsed = new Date(candidate);\n+  return Number.isNaN(parsed.valueOf()) ? date : parsed.toISOString();\n+}\n+\n+function slugifyLocationName(name: string): string {\n+  return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n+}\n\nFile: src/data/site-config.ts (modified, +15/-0)\n@@ -1,4 +1,19 @@\n /** Shared site-wide contact details — single source of truth for phone/email. */\n+export const siteConfig = {\n+  name: 'Exult Healthcare',\n+  url: 'https://exulthealthcare.com',\n+  description:\n+    \"Exult Healthcare provides integrated behavioral health, psychiatry, therapy, TMS, addiction treatment, and mental health services in North Texas.\",\n+  email: 'info@exulthealthcare.com',\n+  logoPath: '/images/exult-logo.png',\n+  // TODO: Replace this hero fallback with a dedicated 1200x630 social share image.\n+  defaultOgImagePath: '/images/Banner-bg.jpg',\n+  socialLinks: [\n+    'https://www.facebook.com/people/Exult-Healthcare/61574967750010/',\n+    'https://www.linkedin.com/company/exulthealthcare-integratedbehavioralhealth/',\n+  ],\n+} as const;\n+\n export const sitePhone = {\n   display: '(972) 369-4220',\n   telHref: 'tel:+19723694220',\n```\n\n## Instructions\nFor each prior comment, determine if it was addressed. Provide your response as JSON:\n- \"summary\": markdown summary of what was fixed and what remains\n- \"comments\": array of { \"path\", \"line\", \"body\" } for any NEW issues found\n- \"verdict\": \"approve\" if all prior issues are resolved and no new blocking issues, otherwise \"request_changes\"\n- \"workflow_suggestions\": array of strings (optional process improvement suggestions)\n- \"prior_resolution\": array of { \"index\": number, \"resolved\": boolean, \"note\": string } for each prior comment\n\nReturn ONLY valid JSON, no markdown fences.\n\n-"
        }
      ]
    },
    {
      "role": "user",
      "parts": [
        {
          "text": "You are re-reviewing PR #22: \"feat(seo): add metadata and schema foundation\" after the author pushed changes to address your prior review.\n\n## Your Prior Review Comments\n1. `src/app/services/psychiatry/[slug]/page.tsx:undefined`: [nitpick] Consider using the `slug` variable directly from `params` (e.g., `` `/services/psychiatry/${slug}/` ``) instead of `data.slug` for the path and `currentPath` props. It is slightly safer as it guarantees a value and doesn't rely on the `servicePageContent` dictionary objects explicitly defining a `slug` property.\n2. `src/app/services/therapy/[slug]/page.tsx:undefined`: [nitpick] Same as above: consider using `slug` from `params` rather than `data.slug` to avoid tight coupling to the data object's shape.\n3. `src/app/services/tms/[slug]/page.tsx:undefined`: [nitpick] Same as above: consider using `slug` from `params` rather than `data.slug`.\n\n## Prior Summary\n🤖 **Gemini Code Review**\n\nThis PR lays an excellent foundation for SEO improvements. It successfully centralizes metadata generation, adds comprehensive JSON-LD structured data (Organization, WebSite, Breadcrumb, LocalBusiness/MedicalClinic, and BlogPosting), and fixes sitemap omissions. The code is clean, type-safe, and correctly defers the Local SEO/NAP (Name, Address, Phone) updates until the correct authoritative public numbers are verified. No blocking issues were found.\n\n## Unresolved Threads\nWould approve code changes, but 8 unresolved review thread(s) remain:\n- **gautam-chatgpt** on `src/data/seo.ts:35`: [suggestion] `buildSeoMetadata` always emits `openGraph.type: 'website'`, includ...\n- **gautam-chatgpt** on `src/data/seo.ts:40`: [suggestion] The helper declares every OG image as `1200x630`, but callers pass ...\n- **gautam-chatgpt** on `src/data/seo.ts:118`: [suggestion] Both location JSON-LD entries use the same `url` and do not define ...\n- **gautam-chatgpt** on `src/data/seo.ts:39`: [suggestion] `buildSeoMetadata` declares every page image as `1200x630`, but man...\n- **gautam-chatgpt** on `src/data/seo.ts:116`: [suggestion] `BlogPosting.publisher` references the organization by `@id`, but G...\n\n\n## Workflow Suggestions\n- 💡 Great job detailing the SEO plan in `SEO-IMPROVEMENT-PLAN.md`! For Phase 2 (NAP cleanup), consider introducing a custom test script or a lint rule to prevent developers from accidentally hardcoding phone numbers back into page components once they are successfully centralized in `site-config.ts`.\n\n\n## Current Diff (after changes)\n```diff\nFile: SEO-IMPROVEMENT-PLAN.md (added, +243/-0)\n@@ -0,0 +1,243 @@\n+# Exult Healthcare SEO Improvement Plan\n+\n+Date: 2026-06-24\n+Branch: `codex/seo-improvement-plan`\n+\n+## Scope\n+\n+This branch proposes the broader SEO roadmap and implements the Phase 1 technical foundation for the Exult Healthcare Next.js marketing site. The audit covered:\n+\n+- App Router routes under `src/app/`\n+- Global and page metadata\n+- `robots.ts` and `sitemap.ts`\n+- Blog, service, location, and provider content data\n+- Public images and local SEO contact details\n+\n+## Current Baseline\n+\n+The site already has a solid starting point:\n+\n+- Global metadata is defined in `src/app/layout.tsx`.\n+- `robots.ts` allows indexing and points to `/sitemap.xml`.\n+- `sitemap.ts` includes static pages plus dynamic blog, service subpage, and team profile URLs.\n+- Most service pages export title and description metadata.\n+- Blog posts are statically generated from `src/data/blog-posts.ts`.\n+- Analytics are already wired through Vercel Analytics, PostHog, and GTM.\n+\n+## Priority Findings\n+\n+### P0: Fix Sitemap and Indexing Accuracy\n+\n+Three live standalone service routes are currently excluded from the generated sitemap because they are listed as standalone service slugs but not included in the static route list:\n+\n+- `/services/iop/`\n+- `/services/php/`\n+- `/services/psychiatric-urgent-care/`\n+\n+Other indexing decisions need explicit handling:\n+\n+- `/new-patient-form/` is a live page but has no metadata and is not in the sitemap.\n+- `/referral-form/` permanently redirects to `/referrals/`; it should stay out of the sitemap.\n+- `/patient-survey/` is in the sitemap, but it may be better as `noindex` if it is intended for existing patients rather than search acquisition.\n+\n+Recommended first implementation:\n+\n+1. Add missing standalone service routes to `sitemap.ts`.\n+2. Replace `new Date()` sitemap timestamps with stable source-backed dates or a shared build date policy.\n+3. Decide whether forms and patient-only pages should be indexed, then add `robots` metadata accordingly.\n+\n+### P0: Resolve NAP Consistency Before Local SEO Work\n+\n+The repo contains conflicting public phone numbers:\n+\n+- Shared site config and header: `(972) 369-4220`\n+- Many service/form/legal pages: `(469) 714-0006`\n+\n+Hours also vary between pages. This should be resolved before structured data and local landing pages are published.\n+\n+Recommended first implementation:\n+\n+1. Confirm the authoritative public phone number, phone purpose, and hours.\n+2. Move all public NAP details into `src/data/site-config.ts` and `src/data/locations.ts`.\n+3. Replace hard-coded phone/address/hour strings in pages and service content.\n+4. Add a simple test or script that flags hard-coded stale phone numbers.\n+\n+### P1: Add Complete Metadata Defaults\n+\n+Current metadata is useful but thin:\n+\n+- No canonical URL policy is expressed through `alternates.canonical`.\n+- Open Graph metadata lacks page URLs and images.\n+- Twitter card metadata is missing.\n+- Several pages only provide a title: Blog, FAQ, Privacy Policy, Terms of Use, HIPAA Notice.\n+- Dynamic blog and provider pages have minimal metadata and no social image.\n+\n+Recommended implementation:\n+\n+1. Add shared SEO helpers for canonical URL, title, description, Open Graph, and Twitter cards.\n+2. Define a default share image under `public/images/`.\n+3. Add route-aware metadata for every indexable page.\n+4. Add article metadata for blog posts using title, excerpt, date, category, and featured image.\n+5. Add provider metadata descriptions using role and bio excerpts.\n+\n+### P1: Add Structured Data\n+\n+The site currently appears to have no first-party JSON-LD. Add schema in phases:\n+\n+1. Sitewide `Organization`, `WebSite`, and healthcare/local business schema.\n+2. `MedicalClinic` or `LocalBusiness` entries for McKinney and Sherman locations.\n+3. `BreadcrumbList` for pages that render breadcrumbs.\n+4. `BlogPosting` for blog detail pages.\n+5. `FAQPage` for FAQ pages only after content is reviewed for eligibility and accuracy.\n+6. Service page schema for core services where clinical claims are stable and reviewed.\n+\n+### P1: Build Local Landing Pages\n+\n+The locations page lists McKinney and Sherman, but there are no dedicated city/location pages. For local search, create focused pages such as:\n+\n+- `/locations/mckinney/`\n+- `/locations/sherman/`\n+- Optional service-location pages after content review, for example `/services/tms/mckinney/` or `/services/therapy/mckinney/`\n+\n+Each location page should include:\n+\n+- Unique clinic copy, address, phone, hours, parking/access details, service availability, and map.\n+- Location-specific title/description/canonical metadata.\n+- Location schema with coordinates and sameAs links to the corresponding Google Business Profile if available.\n+- Internal links to relevant services and forms.\n+\n+### P2: Improve Blog SEO Hygiene\n+\n+The blog has many posts and images, but the content model is basic:\n+\n+- No `updatedAt`, `author`, `tags`, `readingTime`, or canonical override fields.\n+- Posts use HTML strings, and some older posts have inconsistent heading/paragraph structure.\n+- Blog index metadata has only a title.\n+- Pagination is client-side via query string and does not expose strong server-rendered category/topic archive pages.\n+\n+Recommended implementation:\n+\n+1. Extend the `BlogPost` type with optional SEO fields.\n+2. Add `BlogPosting` schema and Open Graph image support.\n+3. Add curated topic/category landing pages for high-value clusters such as TMS, IOP, psychiatry, therapy, anxiety, depression, and addiction treatment.\n+4. Add internal links from blog posts to relevant service and location pages.\n+5. Normalize older post HTML where it causes poor heading hierarchy or malformed snippets.\n+\n+### P2: Strengthen Service Page Search Targeting\n+\n+Service pages have good breadth, but many target broad terms without local modifiers or structured internal linking. Recommended improvements:\n+\n+1. Add location-aware copy blocks to core service pages where clinically accurate.\n+2. Add FAQ sections to high-intent pages such as TMS, IOP, PHP, MAT, psychiatry, and therapy.\n+3. Add related service links and blog links below each service page.\n+4. Create a shared service SEO content model so metadata, sitemap inclusion, breadcrumbs, and schema do not drift.\n+\n+### P2: Image and Social Preview Improvements\n+\n+Public blog images are frequently 600-850 KB. Several hero backgrounds are CSS background images, so they do not get the same optimization and alt-text benefits as `next/image`.\n+\n+Recommended implementation:\n+\n+1. Add a default 1200x630 Open Graph image.\n+2. Compress large blog and service images where quality remains acceptable.\n+3. Prefer Next `<Image>` for important above-the-fold visuals where feasible.\n+4. Keep decorative background images out of accessibility text, but ensure primary informational images have meaningful alt text.\n+\n+## Proposed Implementation Sequence\n+\n+### Phase 1: Technical SEO Foundation\n+\n+Goal: Fix indexation, metadata, and schema basics without changing visible content.\n+\n+- Add shared SEO constants/helpers.\n+- Fix sitemap omissions.\n+- Add canonical, Open Graph, Twitter, and description metadata coverage.\n+- Add sitewide organization/location JSON-LD after NAP confirmation.\n+- Add noindex rules for pages the business does not want in search.\n+\n+Verification:\n+\n+- `pnpm build`\n+- `pnpm typecheck`\n+- Inspect `/sitemap.xml` and `/robots.txt`\n+- Validate rendered JSON-LD with Google Rich Results Test or Schema.org validator\n+\n+### Phase 2: Local SEO and NAP Cleanup\n+\n+Goal: Make local search signals consistent and useful.\n+\n+- Centralize phone, email, hours, addresses, and map URLs.\n+- Replace hard-coded phone/address/hour strings.\n+- Add McKinney and Sherman location pages.\n+- Add location-specific schema and internal links.\n+\n+Verification:\n+\n+- Search repo for stale phone/address strings.\n+- Compare site NAP against Google Business Profile and production footer/header.\n+- Confirm desktop and mobile rendering for new location pages.\n+\n+### Phase 3: Service and Content Cluster Expansion\n+\n+Goal: Improve rankings for high-intent searches.\n+\n+- Add FAQ sections to priority service pages.\n+- Add related services/blog internal linking.\n+- Build city-service pages only where service availability is confirmed.\n+- Create blog category/topic landing pages.\n+\n+Verification:\n+\n+- Clinical/business review of claims.\n+- Build/typecheck.\n+- Manual preview review for mobile and desktop.\n+\n+### Phase 4: Blog Metadata and Content Cleanup\n+\n+Goal: Make the existing blog library easier for search engines and patients to understand.\n+\n+- Extend blog data with author, updated date, tags, and optional SEO fields.\n+- Add BlogPosting schema.\n+- Normalize older posts with malformed HTML and weak heading hierarchy.\n+- Add related post/service links.\n+\n+Verification:\n+\n+- Build all static blog pages.\n+- Spot-check representative old and new posts.\n+- Validate article schema.\n+\n+### Phase 5: Image and Performance Pass\n+\n+Goal: Improve share previews and page performance without visual regression.\n+\n+- Add default OG image and per-post OG images.\n+- Compress oversized images.\n+- Review LCP images on homepage and service pages.\n+- Keep Vercel Speed Insights and Search Console monitoring after deploy.\n+\n+Verification:\n+\n+- Compare Lighthouse/PageSpeed before and after on homepage, services, blog post, and location pages.\n+- Confirm social previews with Facebook/LinkedIn/Twitter preview tools.\n+\n+## Decisions Needed Before Implementation\n+\n+1. Which phone number is authoritative for public website SEO: `(972) 369-4220`, `(469) 714-0006`, or separate numbers by workflow?\n+2. What are the authoritative public hours for each location and for referrals/new patients?\n+3. Should `/new-patient-form/`, `/patient-survey/`, legal pages, and HIPAA notice be indexed?\n+4. Are there Google Business Profile URLs for McKinney and Sherman that should be added as `sameAs` links?\n+5. Which services are offered at each location?\n+6. Who should review clinical claims before FAQ/service content is expanded?\n+\n+## Recommended First PR\n+\n+Start with a focused technical SEO PR:\n+\n+- Fix sitemap omissions.\n+- Add metadata descriptions to thin pages.\n+- Add canonical/Open Graph/Twitter defaults.\n+- Add a default OG image.\n+- Add noindex only for pages explicitly approved as non-indexable.\n+\n+Defer phone changes and local schema until NAP details are confirmed.\n\nFile: src/app/about-us/careers/page.tsx (modified, +6/-3)\n@@ -1,10 +1,13 @@\n import type { Metadata } from 'next';\n import BreadcrumbNav from '@/components/shared/BreadcrumbNav';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Careers',\n-  description: 'Join the Exult Healthcare team. Explore career opportunities and open positions.',\n-};\n+  description: 'Join the Exult Healthcare team. Explore behavioral health career opportunities and open positions in North Texas.',\n+  path: '/about-us/careers/',\n+  imagePath: '/images/career-opportunities.jpg',\n+});\n \n export default function CareersPage() {\n   return (\n\nFile: src/app/about-us/faq/page.tsx (modified, +7/-1)\n@@ -1,8 +1,14 @@\n import type { Metadata } from 'next';\n import { faqItems } from '@/data/faq';\n import FAQList from '@/components/shared/FAQList';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = { title: 'FAQ' };\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'Frequently Asked Questions',\n+  description:\n+    'Find answers to common questions about Exult Healthcare, mental health treatment, psychiatry, therapy, TMS, insurance, and appointments.',\n+  path: '/about-us/faq/',\n+});\n \n export default function FAQPage() {\n   return (\n\nFile: src/app/about-us/meet-the-team/[slug]/page.tsx (modified, +19/-1)\n@@ -3,6 +3,9 @@ import Image from 'next/image';\n import Link from 'next/link';\n import { notFound } from 'next/navigation';\n import { teamMembers } from '@/data/team-members';\n+import { buildSeoMetadata } from '@/data/seo';\n+import JsonLd from '@/components/seo/JsonLd';\n+import { breadcrumbJsonLd } from '@/data/seo';\n \n export function generateStaticParams() {\n   return teamMembers.map((member) => ({ slug: member.slug }));\n@@ -11,7 +14,14 @@ export function generateStaticParams() {\n export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n   const { slug } = await params;\n   const member = teamMembers.find((m) => m.slug === slug);\n-  return member ? { title: member.credentials ? `${member.name}, ${member.credentials}` : member.name } : {};\n+  return member\n+    ? buildSeoMetadata({\n+        title: member.credentials ? `${member.name}, ${member.credentials}` : member.name,\n+        description: `${member.name} is part of the Exult Healthcare team. Learn about their role, background, and approach to behavioral health care.`,\n+        path: `/about-us/meet-the-team/${member.slug}/`,\n+        imagePath: member.image,\n+      })\n+    : {};\n }\n \n export default async function TeamMemberPage({ params }: { params: Promise<{ slug: string }> }) {\n@@ -21,6 +31,14 @@ export default async function TeamMemberPage({ params }: { params: Promise<{ slu\n \n   return (\n     <div className=\"container py-5\">\n+      <JsonLd\n+        data={breadcrumbJsonLd([\n+          { name: 'Home', path: '/' },\n+          { name: 'About Us', path: '/about-us/' },\n+          { name: 'Meet the Team', path: '/about-us/meet-the-team/' },\n+          { name: member.name, path: `/about-us/meet-the-team/${member.slug}/` },\n+        ])}\n+      />\n       <nav aria-label=\"breadcrumb\" className=\"mb-4\">\n         <ol className=\"breadcrumb\">\n           <li className=\"breadcrumb-item\"><Link href=\"/\">Home</Link></li>\n\nFile: src/app/about-us/meet-the-team/page.tsx (modified, +5/-2)\n@@ -2,11 +2,14 @@ import type { Metadata } from 'next';\n import Image from 'next/image';\n import Link from 'next/link';\n import { teamMembers } from '@/data/team-members';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Meet the Team',\n   description: 'Meet the compassionate and experienced mental health professionals at Exult Healthcare serving North Texas.',\n-};\n+  path: '/about-us/meet-the-team/',\n+  imagePath: '/images/team/deepika-bhargava.png',\n+});\n \n export default function MeetTheTeamPage() {\n   return (\n\nFile: src/app/about-us/page.tsx (modified, +5/-2)\n@@ -13,11 +13,14 @@ import {\n   respectSection,\n   serviceAreas,\n } from '@/data/about-content';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'About Us',\n   description: 'Learn about Exult Healthcare — our mission, vision, values, and commitment to providing compassionate behavioral health care in North Texas.',\n-};\n+  path: '/about-us/',\n+  imagePath: '/images/the-exult-experience.jpg',\n+});\n \n export default function AboutUsPage() {\n   return (\n\nFile: src/app/blog/[slug]/page.tsx (modified, +24/-1)\n@@ -3,6 +3,8 @@ import Image from 'next/image';\n import Link from 'next/link';\n import { notFound } from 'next/navigation';\n import { blogPosts } from '@/data/blog-posts';\n+import JsonLd from '@/components/seo/JsonLd';\n+import { blogPostJsonLd, breadcrumbJsonLd, buildSeoMetadata, normalizeIsoDate } from '@/data/seo';\n \n export function generateStaticParams() {\n   return blogPosts.map((post) => ({ slug: post.slug }));\n@@ -11,7 +13,18 @@ export function generateStaticParams() {\n export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n   const { slug } = await params;\n   const post = blogPosts.find((p) => p.slug === slug);\n-  return post ? { title: post.title, description: post.excerpt } : {};\n+  return post\n+    ? buildSeoMetadata({\n+        title: post.title,\n+        description: post.excerpt,\n+        path: `/blog/${post.slug}/`,\n+        imagePath: post.featuredImage,\n+        imageAlt: post.title,\n+        openGraphType: 'article',\n+        publishedTime: normalizeIsoDate(post.date),\n+        section: post.category,\n+      })\n+    : {};\n }\n \n export default async function BlogPostPage({ params }: { params: Promise<{ slug: string }> }) {\n@@ -23,6 +36,16 @@ export default async function BlogPostPage({ params }: { params: Promise<{ slug:\n \n   return (\n     <div className=\"container py-5\">\n+      <JsonLd\n+        data={[\n+          blogPostJsonLd(post),\n+          breadcrumbJsonLd([\n+            { name: 'Home', path: '/' },\n+            { name: 'Blog', path: '/blog/' },\n+            { name: post.title, path: `/blog/${post.slug}/` },\n+          ]),\n+        ]}\n+      />\n       <div className=\"row\">\n         <div className=\"col-lg-8\">\n           <nav aria-label=\"breadcrumb\" className=\"mb-3\">\n\nFile: src/app/blog/page.tsx (modified, +7/-1)\n@@ -2,8 +2,14 @@ import type { Metadata } from 'next';\n import { Suspense } from 'react';\n import { blogPosts } from '@/data/blog-posts';\n import BlogGrid from '@/components/blog/BlogGrid';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = { title: 'Blog' };\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'Mental Health Blog',\n+  description:\n+    'Read Exult Healthcare articles about psychiatry, therapy, TMS, addiction treatment, anxiety, depression, and mental wellness.',\n+  path: '/blog/',\n+});\n \n export default function BlogPage() {\n   return (\n\nFile: src/app/contact/page.tsx (modified, +4/-2)\n@@ -2,11 +2,13 @@ import type { Metadata } from 'next';\n import { locations } from '@/data/locations';\n import { sitePhone } from '@/data/site-config';\n import ContactForm from '@/components/shared/ContactForm';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Contact Us',\n   description: 'Contact Exult Healthcare to schedule an appointment or learn more about our mental health services in McKinney and Sherman, Texas.',\n-};\n+  path: '/contact/',\n+});\n \n export default function ContactPage() {\n   return (\n\nFile: src/app/hipaa-notice/page.tsx (modified, +7/-1)\n@@ -1,6 +1,12 @@\n import type { Metadata } from 'next';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = { title: 'HIPAA Notice' };\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'HIPAA Notice of Privacy Practices',\n+  description:\n+    'Read the Exult Healthcare HIPAA Notice of Privacy Practices for protected health information and patient privacy rights.',\n+  path: '/hipaa-notice/',\n+});\n \n export default function HipaaNoticePage() {\n   return (\n\nFile: src/app/insurance-billing-info/page.tsx (modified, +6/-3)\n@@ -1,10 +1,13 @@\n import type { Metadata } from 'next';\n import Image from 'next/image';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Insurance & Fees',\n-  description: 'Exult Healthcare accepts most major insurance plans. See our accepted insurance providers.',\n-};\n+  description:\n+    'Review insurance and billing information for Exult Healthcare, including accepted behavioral health insurance providers.',\n+  path: '/insurance-billing-info/',\n+});\n \n const insuranceProviders = [\n   { name: 'Aetna Medicare Solutions', logo: '/images/insurance/aetna.webp' },\n\nFile: src/app/layout.tsx (modified, +24/-4)\n@@ -10,6 +10,9 @@ import SiteNavbar from \"@/components/layout/Navbar\";\n import Footer from \"@/components/layout/Footer\";\n import { PostHogProvider } from \"@/components/PostHogProvider\";\n import { PostHogPageView } from \"@/components/PostHogPageView\";\n+import JsonLd from \"@/components/seo/JsonLd\";\n+import { organizationJsonLd, websiteJsonLd, absoluteUrl } from \"@/data/seo\";\n+import { siteConfig } from \"@/data/site-config\";\n \n const lato = Lato({\n   variable: \"--font-lato\",\n@@ -18,18 +21,34 @@ const lato = Lato({\n });\n \n export const metadata: Metadata = {\n-  metadataBase: new URL(\"https://exulthealthcare.com\"),\n+  metadataBase: new URL(siteConfig.url),\n+  applicationName: siteConfig.name,\n   title: {\n     template: \"%s | Exult Healthcare\",\n     default: \"Exult Healthcare: Psychiatry, Mental Health, TMS, Therapy In Texas\",\n   },\n-  description:\n-    \"Exult Healthcare is Dallas/Fort Worth's premier innovative integrated behavioral health and addiction treatment center offering psychiatry, therapy, TMS, and more.\",\n+  description: siteConfig.description,\n   keywords: [\"psychiatry\", \"mental health\", \"TMS\", \"therapy\", \"counseling\", \"Dallas\", \"Fort Worth\", \"McKinney\", \"Sherman\", \"Texas\"],\n   openGraph: {\n     type: \"website\",\n     locale: \"en_US\",\n-    siteName: \"Exult Healthcare\",\n+    siteName: siteConfig.name,\n+    title: \"Exult Healthcare: Psychiatry, Mental Health, TMS, Therapy In Texas\",\n+    description: siteConfig.description,\n+    images: [\n+      {\n+        url: absoluteUrl(siteConfig.defaultOgImagePath),\n+        width: 1200,\n+        height: 630,\n+        alt: siteConfig.name,\n+      },\n+    ],\n+  },\n+  twitter: {\n+    card: \"summary_large_image\",\n+    title: \"Exult Healthcare: Psychiatry, Mental Health, TMS, Therapy In Texas\",\n+    description: siteConfig.description,\n+    images: [absoluteUrl(siteConfig.defaultOgImagePath)],\n   },\n   robots: { index: true, follow: true },\n };\n@@ -48,6 +67,7 @@ export default function RootLayout({\n           crossOrigin=\"anonymous\"\n           referrerPolicy=\"no-referrer\"\n         />\n+        <JsonLd data={[organizationJsonLd(), websiteJsonLd()]} />\n       </head>\n       {process.env.NEXT_PUBLIC_GTM_ID && <GoogleTagManager gtmId={process.env.NEXT_PUBLIC_GTM_ID} />}\n       <body className={lato.variable}>\n\nFile: src/app/locations/page.tsx (modified, +8/-3)\n@@ -1,15 +1,19 @@\n import type { Metadata } from 'next';\n import { locations } from '@/data/locations';\n import { sitePhone } from '@/data/site-config';\n+import JsonLd from '@/components/seo/JsonLd';\n+import { buildSeoMetadata, locationsJsonLd } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Locations',\n   description: 'Find Exult Healthcare near you. We have locations in McKinney and Sherman, Texas serving North Texas and Southern Oklahoma.',\n-};\n+  path: '/locations/',\n+});\n \n export default function LocationsPage() {\n   return (\n     <>\n+      <JsonLd data={locationsJsonLd(locations)} />\n       {/* Page Title */}\n       <section className=\"py-5\">\n         <div className=\"container\">\n@@ -27,9 +31,10 @@ export default function LocationsPage() {\n             const fullAddress = `${loc.address}, ${loc.city}, ${loc.state} ${loc.zip}`;\n             const mapQuery = `Exult Healthcare, ${fullAddress}`;\n             const directionsUrl = `https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(fullAddress)}`;\n+            const locationId = loc.city.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n \n             return (\n-              <div key={loc.name} className=\"row g-4 mb-4 align-items-stretch\">\n+              <div key={loc.name} id={locationId} className=\"row g-4 mb-4 align-items-stretch\">\n                 <div className=\"col-lg-4\">\n                   <div className=\"bg-light p-4 rounded h-100 d-flex flex-column justify-content-center\">\n                     <h2 className=\"h5 mb-3\">{loc.name}</h2>\n\nFile: src/app/new-patient-form/layout.tsx (added, +17/-0)\n@@ -0,0 +1,17 @@\n+import type { Metadata } from 'next';\n+import { buildSeoMetadata } from '@/data/seo';\n+\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'New Patient Intake Form',\n+  description:\n+    'Start as a new patient with Exult Healthcare. Complete the intake form and our team will contact you to schedule your first appointment.',\n+  path: '/new-patient-form/',\n+});\n+\n+export default function NewPatientFormLayout({\n+  children,\n+}: Readonly<{\n+  children: React.ReactNode;\n+}>) {\n+  return children;\n+}\n\nFile: src/app/page.tsx (modified, +15/-0)\n@@ -1,3 +1,4 @@\n+import type { Metadata } from 'next';\n import HeroBanner from '@/components/homepage/HeroBanner';\n import JourneySection from '@/components/homepage/JourneySection';\n import StatsBar from '@/components/homepage/StatsBar';\n@@ -11,6 +12,20 @@ import ValuesGrid from '@/components/homepage/ValuesGrid';\n import InsuranceLogos from '@/components/homepage/InsuranceLogos';\n import ContactCTA from '@/components/homepage/ContactCTA';\n import { parallaxSections } from '@/data/homepage-content';\n+import { buildSeoMetadata } from '@/data/seo';\n+\n+const homeTitle = 'Exult Healthcare: Psychiatry, Mental Health, TMS, Therapy In Texas';\n+\n+export const metadata: Metadata = {\n+  ...buildSeoMetadata({\n+    title: homeTitle,\n+    description:\n+      'Exult Healthcare provides integrated behavioral health, psychiatry, therapy, TMS, addiction treatment, and mental health services in North Texas.',\n+    path: '/',\n+    imagePath: '/images/Banner-bg.jpg',\n+  }),\n+  title: { absolute: homeTitle },\n+};\n \n export default function Home() {\n   return (\n\nFile: src/app/patient-survey/page.tsx (modified, +4/-2)\n@@ -2,11 +2,13 @@ import type { Metadata } from 'next';\n import Link from 'next/link';\n import BreadcrumbNav from '@/components/shared/BreadcrumbNav';\n import SectionHeading from '@/components/shared/SectionHeading';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Patient Survey',\n   description: 'Share your feedback about your experience at Exult Healthcare. Your input helps us continue to improve our services.',\n-};\n+  path: '/patient-survey/',\n+});\n \n export default function PatientSurveyPage() {\n   return (\n\nFile: src/app/privacy-policy/page.tsx (modified, +8/-2)\n@@ -1,6 +1,12 @@\n import type { Metadata } from 'next';\n-\n-export const metadata: Metadata = { title: 'Privacy Policy' };\n+import { buildSeoMetadata } from '@/data/seo';\n+\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'Privacy Policy',\n+  description:\n+    'Review the Exult Healthcare privacy policy for website visitors, patient communications, data collection, and privacy rights.',\n+  path: '/privacy-policy/',\n+});\n \n export default function PrivacyPolicyPage() {\n   return (\n\nFile: src/app/referrals/page.tsx (modified, +4/-2)\n@@ -1,10 +1,12 @@\n import type { Metadata } from 'next';\n import ReferralForm from '@/components/shared/ReferralForm';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Referrals',\n   description: 'Refer a patient to Exult Healthcare for mental health services in North Texas.',\n-};\n+  path: '/referrals/',\n+});\n \n export default function ReferralsPage() {\n   return (\n\nFile: src/app/services/iop/page.tsx (modified, +6/-2)\n@@ -1,13 +1,16 @@\n import type { Metadata } from 'next';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const data = servicePageContent['iop'];\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: data.title,\n   description: data.metaDescription,\n-};\n+  path: '/services/iop/',\n+  imagePath: data.heroImage,\n+});\n \n export default function IOPPage() {\n   return (\n@@ -20,6 +23,7 @@ export default function IOPPage() {\n         { label: 'Services', href: '/services/' },\n         { label: 'IOP', href: '#' },\n       ]}\n+      currentPath=\"/services/iop/\"\n     />\n   );\n }\n\nFile: src/app/services/medication-assisted-treatment/page.tsx (modified, +5/-2)\n@@ -1,11 +1,14 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n import FAQList from '@/components/shared/FAQList';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Medication-Assisted Treatment (MAT)',\n   description: 'Medication-Assisted Treatment (MAT) is the use of FDA-approved medications, in combination with counseling and behavioral therapies, to provide a whole-patient approach to the treatment of substance use disorders.',\n-};\n+  path: '/services/medication-assisted-treatment/',\n+  imagePath: '/images/services/Addiction-Treatment.png',\n+});\n \n const faqItems = [\n   {\n\nFile: src/app/services/page.tsx (modified, +5/-2)\n@@ -3,11 +3,14 @@ import Image from 'next/image';\n import Link from 'next/link';\n import BreadcrumbNav from '@/components/shared/BreadcrumbNav';\n import SectionHeading from '@/components/shared/SectionHeading';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Services',\n   description: 'Exult Healthcare offers mental health services in Texas including psychiatry, therapy, TMS, weight loss management, and yoga and mindfulness.',\n-};\n+  path: '/services/',\n+  imagePath: '/images/psychiatric-services.png',\n+});\n \n const services = [\n   {\n\nFile: src/app/services/php/page.tsx (modified, +6/-2)\n@@ -1,13 +1,16 @@\n import type { Metadata } from 'next';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const data = servicePageContent['php'];\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: data.title,\n   description: data.metaDescription,\n-};\n+  path: '/services/php/',\n+  imagePath: data.heroImage,\n+});\n \n export default function PHPPage() {\n   return (\n@@ -20,6 +23,7 @@ export default function PHPPage() {\n         { label: 'Services', href: '/services/' },\n         { label: 'PHP', href: '#' },\n       ]}\n+      currentPath=\"/services/php/\"\n     />\n   );\n }\n\nFile: src/app/services/psychiatric-urgent-care/page.tsx (modified, +6/-2)\n@@ -1,13 +1,16 @@\n import type { Metadata } from 'next';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const data = servicePageContent['psychiatric-urgent-care'];\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: data.title,\n   description: data.metaDescription,\n-};\n+  path: '/services/psychiatric-urgent-care/',\n+  imagePath: data.heroImage,\n+});\n \n export default function PsychiatricUrgentCarePage() {\n   return (\n@@ -20,6 +23,7 @@ export default function PsychiatricUrgentCarePage() {\n         { label: 'Services', href: '/services/' },\n         { label: 'Psychiatric Urgent Care', href: '#' },\n       ]}\n+      currentPath=\"/services/psychiatric-urgent-care/\"\n     />\n   );\n }\n\nFile: src/app/services/psychiatry/[slug]/page.tsx (modified, +10/-1)\n@@ -2,6 +2,7 @@ import type { Metadata } from 'next';\n import { notFound } from 'next/navigation';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const slugs = ['child-psychiatry', 'adolescent-psychiatry', 'adult-psychiatry', 'geriatric-psychiatry', 'telepsychiatry'];\n \n@@ -12,7 +13,14 @@ export function generateStaticParams() {\n export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n   const { slug } = await params;\n   const data = servicePageContent[slug];\n-  return data ? { title: data.title, description: data.metaDescription } : {};\n+  return data\n+    ? buildSeoMetadata({\n+        title: data.title,\n+        description: data.metaDescription,\n+        path: `/services/psychiatry/${slug}/`,\n+        imagePath: data.heroImage,\n+      })\n+    : {};\n }\n \n export default async function PsychiatrySubpage({ params }: { params: Promise<{ slug: string }> }) {\n@@ -30,6 +38,7 @@ export default async function PsychiatrySubpage({ params }: { params: Promise<{\n         { label: 'Psychiatry', href: '/services/psychiatry/' },\n         { label: data.title, href: '#' },\n       ]}\n+      currentPath={`/services/psychiatry/${slug}/`}\n     />\n   );\n }\n\nFile: src/app/services/psychiatry/page.tsx (modified, +5/-2)\n@@ -1,11 +1,14 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n import FAQList from '@/components/shared/FAQList';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Psychiatry Services',\n   description: 'Exult Healthcare offers supportive psychiatry services in Texas to treat depression, anxiety, substance abuse, and many additional mental health conditions.',\n-};\n+  path: '/services/psychiatry/',\n+  imagePath: '/images/services/Psychiatry-Services.png',\n+});\n \n const subServices = [\n   {\n\nFile: src/app/services/telehealth/page.tsx (modified, +5/-2)\n@@ -1,11 +1,14 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Telehealth Therapy in Texas',\n   description:\n     'Telehealth mental health services in Texas. Access telepsychiatry and teletherapy via secure video appointments from anywhere in Texas at Exult Healthcare.',\n-};\n+  path: '/services/telehealth/',\n+  imagePath: '/images/services/Therapy-Counseling.png',\n+});\n \n export default function TelehealthPage() {\n   return (\n\nFile: src/app/services/therapy/[slug]/page.tsx (modified, +10/-1)\n@@ -2,6 +2,7 @@ import type { Metadata } from 'next';\n import { notFound } from 'next/navigation';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const slugs = [\n   'anger-management', 'animal-assisted-therapy', 'art-therapy',\n@@ -18,7 +19,14 @@ export function generateStaticParams() {\n export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n   const { slug } = await params;\n   const data = servicePageContent[slug];\n-  return data ? { title: data.title, description: data.metaDescription } : {};\n+  return data\n+    ? buildSeoMetadata({\n+        title: data.title,\n+        description: data.metaDescription,\n+        path: `/services/therapy/${slug}/`,\n+        imagePath: data.heroImage,\n+      })\n+    : {};\n }\n \n export default async function TherapySubpage({ params }: { params: Promise<{ slug: string }> }) {\n@@ -36,6 +44,7 @@ export default async function TherapySubpage({ params }: { params: Promise<{ slu\n         { label: 'Therapy', href: '/services/therapy/' },\n         { label: data.title, href: '#' },\n       ]}\n+      currentPath={`/services/therapy/${slug}/`}\n     />\n   );\n }\n\nFile: src/app/services/therapy/page.tsx (modified, +5/-2)\n@@ -1,11 +1,14 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n import FAQList from '@/components/shared/FAQList';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Therapy Services',\n   description: 'Multiple types of therapies offered by specialized licensed professionals from art, equine, to individual therapy at Exult Healthcare in Texas.',\n-};\n+  path: '/services/therapy/',\n+  imagePath: '/images/services/Therapy-Counseling.png',\n+});\n \n const therapyTypes = [\n   {\n\nFile: src/app/services/tms/[slug]/page.tsx (modified, +10/-1)\n@@ -2,6 +2,7 @@ import type { Metadata } from 'next';\n import { notFound } from 'next/navigation';\n import { servicePageContent } from '@/data/service-page-content';\n import ServicePageLayout from '@/components/services/ServicePageLayout';\n+import { buildSeoMetadata } from '@/data/seo';\n \n const slugs = [\n   'typical-treatment', 'is-tms-right-for-me', 'tms-saint-tms-and-accelerated-tms',\n@@ -17,7 +18,14 @@ export function generateStaticParams() {\n export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {\n   const { slug } = await params;\n   const data = servicePageContent[slug];\n-  return data ? { title: data.title, description: data.metaDescription } : {};\n+  return data\n+    ? buildSeoMetadata({\n+        title: data.title,\n+        description: data.metaDescription,\n+        path: `/services/tms/${slug}/`,\n+        imagePath: data.heroImage,\n+      })\n+    : {};\n }\n \n export default async function TMSSubpage({ params }: { params: Promise<{ slug: string }> }) {\n@@ -35,6 +43,7 @@ export default async function TMSSubpage({ params }: { params: Promise<{ slug: s\n         { label: 'TMS', href: '/services/tms/' },\n         { label: data.title, href: '#' },\n       ]}\n+      currentPath={`/services/tms/${slug}/`}\n     />\n   );\n }\n\nFile: src/app/services/tms/page.tsx (modified, +5/-2)\n@@ -1,10 +1,13 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'TMS Therapy',\n   description: 'Transcranial Magnetic Stimulation (TMS) is an FDA-approved, non-invasive treatment for Major Depressive Disorder, Treatment-Resistant Depression, PTSD, OCD, Anxiety, and other mood disorders at Exult Healthcare.',\n-};\n+  path: '/services/tms/',\n+  imagePath: '/images/services/TMS-Therapy.png',\n+});\n \n const subServices = [\n   { slug: 'typical-treatment', label: 'Typical Treatment' },\n\nFile: src/app/services/weight-loss-management/page.tsx (modified, +5/-2)\n@@ -1,11 +1,14 @@\n import type { Metadata } from 'next';\n import Link from 'next/link';\n import FAQAccordion from '@/components/shared/FAQAccordion';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Weight Loss Management',\n   description: 'A comprehensive, integrated approach to weight guidance from a medical, nutritional, exercise, behavioral and lifestyle change at Exult Healthcare.',\n-};\n+  path: '/services/weight-loss-management/',\n+  imagePath: '/images/services/healty-palace-fixed.jpg',\n+});\n \n const serviceAccordionItems = [\n   {\n\nFile: src/app/services/yoga-and-mindfulness/page.tsx (modified, +5/-2)\n@@ -2,12 +2,15 @@ import type { Metadata } from 'next';\n import Link from 'next/link';\n import Image from 'next/image';\n import FAQList from '@/components/shared/FAQList';\n+import { buildSeoMetadata } from '@/data/seo';\n \n-export const metadata: Metadata = {\n+export const metadata: Metadata = buildSeoMetadata({\n   title: 'Yoga and Mindfulness',\n   description:\n     'Yoga and mindfulness therapy in Dallas/Fort Worth. Integrate mind-body practices into your mental health treatment at Exult Healthcare for enhanced well-being and stress reduction.',\n-};\n+  path: '/services/yoga-and-mindfulness/',\n+  imagePath: '/images/services/Therapy-Counseling.png',\n+});\n \n const faqItems = [\n   {\n\nFile: src/app/sitemap.ts (modified, +3/-5)\n@@ -8,15 +8,15 @@ const BASE_URL = 'https://exulthealthcare.com';\n export default function sitemap(): MetadataRoute.Sitemap {\n   const staticPages = [\n     '', '/about-us/', '/about-us/meet-the-team/', '/about-us/careers/', '/about-us/faq/',\n-    '/contact/', '/locations/', '/services/', '/blog/', '/referrals/',\n+    '/contact/', '/locations/', '/new-patient-form/', '/services/', '/blog/', '/referrals/',\n     '/insurance-billing-info/', '/patient-survey/', '/terms-of-use/', '/privacy-policy/',\n     '/hipaa-notice/',\n     '/services/psychiatry/', '/services/therapy/', '/services/tms/',\n     '/services/medication-assisted-treatment/', '/services/weight-loss-management/',\n-    '/services/yoga-and-mindfulness/', '/services/telehealth/',\n+    '/services/yoga-and-mindfulness/', '/services/telehealth/', '/services/iop/',\n+    '/services/php/', '/services/psychiatric-urgent-care/',\n   ].map((path) => ({\n     url: `${BASE_URL}${path}`,\n-    lastModified: new Date(),\n     changeFrequency: 'weekly' as const,\n     priority: path === '' ? 1 : 0.8,\n   }));\n@@ -39,7 +39,6 @@ export default function sitemap(): MetadataRoute.Sitemap {\n             : 'therapy';\n       return {\n         url: `${BASE_URL}/services/${category}/${page.slug}/`,\n-        lastModified: new Date(),\n         changeFrequency: 'monthly' as const,\n         priority: 0.7,\n       };\n@@ -54,7 +53,6 @@ export default function sitemap(): MetadataRoute.Sitemap {\n \n   const teamPages = teamMembers.map((member) => ({\n     url: `${BASE_URL}/about-us/meet-the-team/${member.slug}/`,\n-    lastModified: new Date(),\n     changeFrequency: 'monthly' as const,\n     priority: 0.6,\n   }));\n\nFile: src/app/terms-of-use/page.tsx (modified, +8/-2)\n@@ -1,6 +1,12 @@\n import type { Metadata } from 'next';\n-\n-export const metadata: Metadata = { title: 'Terms of Use Agreement' };\n+import { buildSeoMetadata } from '@/data/seo';\n+\n+export const metadata: Metadata = buildSeoMetadata({\n+  title: 'Terms of Use Agreement',\n+  description:\n+    'Read the Exult Healthcare website terms of use, disclaimers, intellectual property notices, and permitted use guidelines.',\n+  path: '/terms-of-use/',\n+});\n \n export default function TermsPage() {\n   return (\n\nFile: src/components/seo/JsonLd.tsx (added, +14/-0)\n@@ -0,0 +1,14 @@\n+type JsonLdProps = {\n+  data: Record<string, unknown> | Record<string, unknown>[];\n+};\n+\n+export default function JsonLd({ data }: JsonLdProps) {\n+  return (\n+    <script\n+      type=\"application/ld+json\"\n+      dangerouslySetInnerHTML={{\n+        __html: JSON.stringify(data).replace(/</g, '\\\\u003c'),\n+      }}\n+    />\n+  );\n+}\n\nFile: src/components/services/ServicePageLayout.tsx (modified, +14/-1)\n@@ -1,15 +1,28 @@\n import Link from 'next/link';\n+import JsonLd from '@/components/seo/JsonLd';\n+import { breadcrumbJsonLd } from '@/data/seo';\n \n interface ServicePageLayoutProps {\n   title: string;\n   heroImage: string;\n   content: string;\n   breadcrumbs: { label: string; href: string }[];\n+  currentPath: string;\n }\n \n-export default function ServicePageLayout({ title, heroImage, content, breadcrumbs }: ServicePageLayoutProps) {\n+export default function ServicePageLayout({ title, heroImage, content, breadcrumbs, currentPath }: ServicePageLayoutProps) {\n+  const breadcrumbSchemaItems = breadcrumbs.map((crumb) => ({\n+    name: crumb.label,\n+    path: crumb.href === '#' ? currentPath : crumb.href,\n+  }));\n+  const schemaItems =\n+    breadcrumbSchemaItems[0]?.path === '/'\n+      ? breadcrumbSchemaItems\n+      : [{ name: 'Home', path: '/' }, ...breadcrumbSchemaItems];\n+\n   return (\n     <>\n+      <JsonLd data={breadcrumbJsonLd(schemaItems)} />\n       <section className=\"hero-banner\" style={{ backgroundImage: `url('${heroImage}')`, padding: '120px 0' }}>\n         <div className=\"container position-relative\" style={{ zIndex: 1 }}>\n           <h1>{title}</h1>\n\nFile: src/data/seo.ts (added, +213/-0)\n@@ -0,0 +1,213 @@\n+import type { Metadata } from 'next';\n+import type { BlogPost, Location } from '@/types';\n+import { siteConfig } from '@/data/site-config';\n+\n+type SeoMetadataOptions = {\n+  title: string;\n+  description: string;\n+  path: string;\n+  imagePath?: string;\n+  imageAlt?: string;\n+  imageWidth?: number;\n+  imageHeight?: number;\n+  openGraphType?: 'website' | 'article';\n+  publishedTime?: string;\n+  section?: string;\n+  noIndex?: boolean;\n+  noFollow?: boolean;\n+};\n+\n+type BreadcrumbItem = {\n+  name: string;\n+  path: string;\n+};\n+\n+export function absoluteUrl(path = '/'): string {\n+  if (/^https?:\\/\\//.test(path)) return path;\n+  return new URL(path, siteConfig.url).toString();\n+}\n+\n+export function buildSeoMetadata({\n+  title,\n+  description,\n+  path,\n+  imagePath = siteConfig.defaultOgImagePath,\n+  imageAlt = siteConfig.name,\n+  imageWidth,\n+  imageHeight,\n+  openGraphType = 'website',\n+  publishedTime,\n+  section,\n+  noIndex = false,\n+  noFollow = false,\n+}: SeoMetadataOptions): Metadata {\n+  const url = absoluteUrl(path);\n+  const imageUrl = absoluteUrl(imagePath);\n+  const image = {\n+    url: imageUrl,\n+    alt: imageAlt,\n+    ...(imageWidth && imageHeight ? { width: imageWidth, height: imageHeight } : {}),\n+  };\n+  const openGraph: Metadata['openGraph'] =\n+    openGraphType === 'article'\n+      ? {\n+          title,\n+          description,\n+          url,\n+          siteName: siteConfig.name,\n+          locale: 'en_US',\n+          type: 'article',\n+          publishedTime,\n+          section,\n+          images: [image],\n+        }\n+      : {\n+          title,\n+          description,\n+          url,\n+          siteName: siteConfig.name,\n+          locale: 'en_US',\n+          type: 'website',\n+          images: [image],\n+        };\n+\n+  return {\n+    title,\n+    description,\n+    alternates: {\n+      canonical: url,\n+    },\n+    openGraph,\n+    twitter: {\n+      card: 'summary_large_image',\n+      title,\n+      description,\n+      images: [imageUrl],\n+    },\n+    robots: { index: !noIndex, follow: !noFollow },\n+  };\n+}\n+\n+export function organizationJsonLd() {\n+  return {\n+    '@context': 'https://schema.org',\n+    '@type': 'MedicalOrganization',\n+    '@id': absoluteUrl('/#organization'),\n+    name: siteConfig.name,\n+    url: siteConfig.url,\n+    logo: absoluteUrl(siteConfig.logoPath),\n+    email: siteConfig.email,\n+    sameAs: siteConfig.socialLinks,\n+  };\n+}\n+\n+export function websiteJsonLd() {\n+  return {\n+    '@context': 'https://schema.org',\n+    '@type': 'WebSite',\n+    '@id': absoluteUrl('/#website'),\n+    name: siteConfig.name,\n+    url: siteConfig.url,\n+    publisher: {\n+      '@id': absoluteUrl('/#organization'),\n+    },\n+  };\n+}\n+\n+export function breadcrumbJsonLd(items: BreadcrumbItem[]) {\n+  return {\n+    '@context': 'https://schema.org',\n+    '@type': 'BreadcrumbList',\n+    itemListElement: items.map((item, index) => ({\n+      '@type': 'ListItem',\n+      position: index + 1,\n+      name: item.name,\n+      item: absoluteUrl(item.path),\n+    })),\n+  };\n+}\n+\n+export function blogPostJsonLd(post: BlogPost) {\n+  const postUrl = absoluteUrl(`/blog/${post.slug}/`);\n+  const imageUrl = absoluteUrl(post.featuredImage);\n+  const publishedDate = normalizeIsoDate(post.date);\n+\n+  return {\n+    '@context': 'https://schema.org',\n+    '@type': 'BlogPosting',\n+    mainEntityOfPage: postUrl,\n+    headline: post.title,\n+    description: post.excerpt,\n+    image: imageUrl,\n+    datePublished: publishedDate,\n+    author: {\n+      '@type': 'Organization',\n+      name: siteConfig.name,\n+      url: siteConfig.url,\n+    },\n+    publisher: {\n+      '@type': 'Organization',\n+      '@id': absoluteUrl('/#organization'),\n+      name: siteConfig.name,\n+      logo: {\n+        '@type': 'ImageObject',\n+        url: absoluteUrl(siteConfig.logoPath),\n+      },\n+    },\n+  };\n+}\n+\n+export function locationJsonLd(location: Location) {\n+  const address = `${location.address}, ${location.city}, ${location.state} ${location.zip}`;\n+  const locationPath = `/locations/#${slugifyLocationName(location.city)}`;\n+  const locationUrl = absoluteUrl(locationPath);\n+\n+  return {\n+    '@context': 'https://schema.org',\n+    '@type': 'MedicalClinic',\n+    '@id': locationUrl,\n+    name: `${siteConfig.name} - ${location.name}`,\n+    url: locationUrl,\n+    email: location.email,\n+    address: {\n+      '@type': 'PostalAddress',\n+      streetAddress: location.address,\n+      addressLocality: location.city,\n+      addressRegion: location.state,\n+      postalCode: location.zip,\n+      addressCountry: 'US',\n+    },\n+    geo: {\n+      '@type': 'GeoCoordinates',\n+      latitude: location.coordinates.lat,\n+      longitude: location.coordinates.lng,\n+    },\n+    hasMap: `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(\n+      `Exult Healthcare, ${address}`,\n+    )}`,\n+    parentOrganization: {\n+      '@id': absoluteUrl('/#organization'),\n+    },\n+  };\n+}\n+\n+export function locationsJsonLd(locationList: Location[]) {\n+  return {\n+    '@context': 'https://schema.org',\n+    '@graph': locationList.map((location) => {\n+      const node: Record<string, unknown> = { ...locationJsonLd(location) };\n+      delete node['@context'];\n+      return node;\n+    }),\n+  };\n+}\n+\n+export function normalizeIsoDate(date: string): string {\n+  const candidate = /^\\d{4}-\\d{2}-\\d{2}$/.test(date) ? `${date}T00:00:00.000Z` : date;\n+  const parsed = new Date(candidate);\n+  return Number.isNaN(parsed.valueOf()) ? date : parsed.toISOString();\n+}\n+\n+function slugifyLocationName(name: string): string {\n+  return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n+}\n\nFile: src/data/site-config.ts (modified, +15/-0)\n@@ -1,4 +1,19 @@\n /** Shared site-wide contact details — single source of truth for phone/email. */\n+export const siteConfig = {\n+  name: 'Exult Healthcare',\n+  url: 'https://exulthealthcare.com',\n+  description:\n+    \"Exult Healthcare provides integrated behavioral health, psychiatry, therapy, TMS, addiction treatment, and mental health services in North Texas.\",\n+  email: 'info@exulthealthcare.com',\n+  logoPath: '/images/exult-logo.png',\n+  // TODO: Replace this hero fallback with a dedicated 1200x630 social share image.\n+  defaultOgImagePath: '/images/Banner-bg.jpg',\n+  socialLinks: [\n+    'https://www.facebook.com/people/Exult-Healthcare/61574967750010/',\n+    'https://www.linkedin.com/company/exulthealthcare-integratedbehavioralhealth/',\n+  ],\n+} as const;\n+\n export const sitePhone = {\n   display: '(972) 369-4220',\n   telHref: 'tel:+19723694220',\n```\n\n## Instructions\nFor each prior comment, determine if it was addressed. Provide your response as JSON:\n- \"summary\": markdown summary of what was fixed and what remains\n- \"comments\": array of { \"path\", \"line\", \"body\" } for any NEW issues found\n- \"verdict\": \"approve\" if all prior issues are resolved and no new blocking issues, otherwise \"request_changes\"\n- \"workflow_suggestions\": array of strings (optional process improvement suggestions)\n- \"prior_resolution\": array of { \"index\": number, \"resolved\": boolean, \"note\": string } for each prior comment\n\nReturn ONLY valid JSON, no markdown fences.\n\n-"
        }
      ]
    }
  ]
}