{"_id":"@a1local/next-adpages","name":"@a1local/next-adpages","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@a1local/next-adpages","version":"0.1.0","description":"Dependency-light Next.js helpers for local-service landing page schema, UTM capture, and metadata QA.","type":"module","license":"MIT","author":{"name":"A1 Local","url":"https://a1local.com.au/"},"homepage":"https://github.com/a1local/next-adpages#readme","repository":{"type":"git","url":"git+https://github.com/a1local/next-adpages.git"},"bugs":{"url":"https://github.com/a1local/next-adpages/issues"},"funding":{"type":"custom","url":"https://a1local.com.au/extensions/"},"publishConfig":{"access":"public"},"sideEffects":false,"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","lint":"tsc --noEmit -p tsconfig.json","prepublishOnly":"npm run build"},"keywords":["nextjs","local-seo","landing-pages","schema-org","utm"],"devDependencies":{"typescript":"^5.9.3"},"gitHead":"0051b08e303680b1f851a3980ab4207b2b954405","_id":"@a1local/next-adpages@0.1.0","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-hlwNWgqdflOZLh4eNIT0AoUegp0Ct5ALxbdVYRgw2gKQOI5SLWhSlxC3C6pMYBNK83f17vKrSuZR+PgaZixzhA==","shasum":"0d20f528838d945a611b760c686909e2b600e2e4","tarball":"https://registry.npmjs.org/@a1local/next-adpages/-/next-adpages-0.1.0.tgz","fileCount":11,"unpackedSize":43898,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGqm4FNvZWM0VePH5HVN4RQrGUNXIK+y9RVi4YAnrUJGAiEA5D773BJ863AtQJHCtQYdE5xWRZ26JDSx+C+fHmoOhtY="}]},"_npmUser":{"name":"a1local","email":"extensions@a1local.com.au"},"directories":{},"maintainers":[{"name":"a1local","email":"extensions@a1local.com.au"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/next-adpages_0.1.0_1779689356397_0.4550757542518009"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-25T06:09:16.304Z","0.1.0":"2026-05-25T06:09:16.553Z","modified":"2026-05-25T06:09:16.703Z"},"maintainers":[{"name":"a1local","email":"extensions@a1local.com.au"}],"description":"Dependency-light Next.js helpers for local-service landing page schema, UTM capture, and metadata QA.","homepage":"https://github.com/a1local/next-adpages#readme","keywords":["nextjs","local-seo","landing-pages","schema-org","utm"],"repository":{"type":"git","url":"git+https://github.com/a1local/next-adpages.git"},"author":{"name":"A1 Local","url":"https://a1local.com.au/"},"bugs":{"url":"https://github.com/a1local/next-adpages/issues"},"license":"MIT","readme":"# @a1local/next-adpages\n\nDependency-light helpers for Next.js local-service landing pages. The package avoids a hard dependency on Next and exports plain TypeScript helpers that fit App Router metadata, JSON-LD script rendering, and middleware-style UTM capture.\n\n## What is included\n\n- LocalBusiness JSON-LD helpers for Next/React `<script>` rendering.\n- A small `LocalBusinessJsonLd()` descriptor helper for projects that want to wrap the script in their own component.\n- Local service metadata generation for `generateMetadata()` or static `metadata` exports.\n- Metadata checklist helpers for title, description, canonical, Open Graph, local service signals, and indexability.\n- UTM capture helpers that can be used from `middleware.ts` without importing Next types.\n\n## Install\n\n```sh\nnpm install @a1local/next-adpages\n```\n\nThis package does not import `next` or `react`. It returns script props and metadata-shaped objects that are compatible with Next apps.\n\n## LocalBusiness JSON-LD\n\nUse the prop helper directly in a Next page or layout:\n\n```tsx\nimport { createLocalBusinessJsonLdProps } from \"@a1local/next-adpages\";\n\nexport default function Page() {\n  const jsonLd = createLocalBusinessJsonLdProps({\n    name: \"Example Plumbing\",\n    businessType: \"Plumber\",\n    url: \"https://example.com\",\n    telephone: \"+61 8 0000 0000\",\n    areaServed: [\"Perth\", \"Fremantle\"],\n    services: [\"Emergency plumbing\", \"Blocked drains\"]\n  });\n\n  return <script {...jsonLd} />;\n}\n```\n\nIf a project wants to centralize rendering, wrap the descriptor helper:\n\n```tsx\nimport { LocalBusinessJsonLd } from \"@a1local/next-adpages\";\n\nfunction JsonLdScript() {\n  const script = LocalBusinessJsonLd({\n    name: \"Example Plumbing\",\n    areaServed: [\"Perth\"],\n    services: [\"Hot water repairs\"]\n  });\n\n  return <script {...script.props} />;\n}\n```\n\n## Metadata helpers\n\nGenerate Next-compatible metadata without importing Next types:\n\n```ts\nimport { buildLocalServiceMetadata, checkNextLocalPageMetadata } from \"@a1local/next-adpages\";\n\nexport const metadata = buildLocalServiceMetadata({\n  businessName: \"Example Plumbing\",\n  service: \"Emergency plumber\",\n  area: \"Perth\",\n  baseUrl: \"https://example.com\",\n  path: \"/emergency-plumber/perth/\"\n});\n\nconst result = checkNextLocalPageMetadata(metadata, {\n  service: \"Emergency plumber\",\n  area: \"Perth\",\n  businessName: \"Example Plumbing\"\n});\n```\n\nThe checklist result includes `ok`, `score`, `missing`, `warnings`, and item-level messages suitable for CLI output, build logs, or a future dev overlay.\n\n## UTM middleware notes\n\nThe UTM helpers deliberately return plain data so they can be wired into Next middleware without this package importing `next/server`:\n\n```ts\nimport { NextResponse } from \"next/server\";\nimport type { NextRequest } from \"next/server\";\nimport { createUtmMiddlewarePlan } from \"@a1local/next-adpages\";\n\nexport function middleware(request: NextRequest) {\n  const response = NextResponse.next();\n  const plan = createUtmMiddlewarePlan(request.url);\n\n  if (plan.setCookieHeader) {\n    response.headers.append(\"Set-Cookie\", plan.setCookieHeader);\n  }\n\n  return response;\n}\n```\n\nFor App Router server components, read the `adpages_utm` cookie with `next/headers` and attach it to lead forms or analytics events. Do not treat the cookie as verified attribution data; it is a lightweight capture aid.\n\n## Publish status\n\nThis is an initial scaffold. Before publishing, add final package ownership, public docs URL, examples from a real Next app, and any marketplace-specific support/privacy links.\n","readmeFilename":"README.md","_rev":"1-23f1969934649cdec454536c4454c64d"}