{
  "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-4zvwfp\n- **Workspace Directories:**\n  - /tmp/pr-review-4ZVwfp\n- **Directory Structure:**\n\nShowing up to 200 items (files + folders).\n\n/tmp/pr-review-4ZVwfp/\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/data/seo.ts:undefined`: [suggestion] Consider making `path` a required property (i.e., `path: string;`) rather than optional. Since it currently defaults to `'/'`, if a developer forgets to include it on a new page, that page will inadvertently declare the homepage as its canonical URL, which could harm its indexing. Making it required forces explicit path declarations and prevents accidental duplication.\n2. `src/components/services/ServicePageLayout.tsx:undefined`: [suggestion] For the structured data, consider prepending the 'Home' page to your breadcrumb schema array. While visual breadcrumbs on service pages might not show 'Home', Google's documentation for the `BreadcrumbList` schema highly recommends starting the trail at the root level for maximum context.\n\nExample:\n```typescript\nconst schemaItems = [\n  { name: 'Home', path: '/' },\n  ...breadcrumbSchemaItems\n];\n```\n\n## Prior Summary\n🤖 **Gemini Code Review**\n\nThis PR lays an excellent technical SEO foundation for the site. The implementation of the `buildSeoMetadata` helper, global Open Graph/Twitter configurations, and modular JSON-LD schemas is clean and aligns with Next.js best practices. Deferring the NAP consistency cleanup is noted and acceptable given the current data discrepancies.\n\nEverything looks robust and is safe to merge. I've approved the PR and left a couple of `[suggestion]` comments for future-proofing canonical URLs and improving breadcrumb structured data.\n\n## Unresolved Threads\nWould approve code changes, but 21 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- 💡 Consider adding a lightweight SEO linting tool or a custom test script to CI that verifies all static pages export a `path` property in their metadata, ensuring canonical tags never accidentally regress to the root URL.\n- 💡 Since JSON-LD schemas are being introduced, it might be beneficial to run automated validation using a tool like `schema-dts` or integration tests validating output against Google's Rich Results standards.\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 } 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: `${post.date}T00:00:00.000Z`,\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, +6/-2)\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\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: noIndex ? { index: false, follow: !noFollow } : { index: true, follow: true },\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': 'Person',\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+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/data/seo.ts:undefined`: [suggestion] Consider making `path` a required property (i.e., `path: string;`) rather than optional. Since it currently defaults to `'/'`, if a developer forgets to include it on a new page, that page will inadvertently declare the homepage as its canonical URL, which could harm its indexing. Making it required forces explicit path declarations and prevents accidental duplication.\n2. `src/components/services/ServicePageLayout.tsx:undefined`: [suggestion] For the structured data, consider prepending the 'Home' page to your breadcrumb schema array. While visual breadcrumbs on service pages might not show 'Home', Google's documentation for the `BreadcrumbList` schema highly recommends starting the trail at the root level for maximum context.\n\nExample:\n```typescript\nconst schemaItems = [\n  { name: 'Home', path: '/' },\n  ...breadcrumbSchemaItems\n];\n```\n\n## Prior Summary\n🤖 **Gemini Code Review**\n\nThis PR lays an excellent technical SEO foundation for the site. The implementation of the `buildSeoMetadata` helper, global Open Graph/Twitter configurations, and modular JSON-LD schemas is clean and aligns with Next.js best practices. Deferring the NAP consistency cleanup is noted and acceptable given the current data discrepancies.\n\nEverything looks robust and is safe to merge. I've approved the PR and left a couple of `[suggestion]` comments for future-proofing canonical URLs and improving breadcrumb structured data.\n\n## Unresolved Threads\nWould approve code changes, but 21 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- 💡 Consider adding a lightweight SEO linting tool or a custom test script to CI that verifies all static pages export a `path` property in their metadata, ensuring canonical tags never accidentally regress to the root URL.\n- 💡 Since JSON-LD schemas are being introduced, it might be beneficial to run automated validation using a tool like `schema-dts` or integration tests validating output against Google's Rich Results standards.\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 } 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: `${post.date}T00:00:00.000Z`,\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, +6/-2)\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\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: noIndex ? { index: false, follow: !noFollow } : { index: true, follow: true },\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': 'Person',\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+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-"
        }
      ]
    }
  ]
}