codeclinch-geo
Reusable TypeScript helpers for SEO and GEO, built for existing websites and new builds.
The package helps generate:
- SEO metadata for pages and services
- JSON-LD schema for organizations, websites, services, articles, FAQs, and breadcrumbs
llms.txtfor AI discoveryai-visibility.jsonfor machine-readable GEO context.well-known/agent.jsonfor a compact machine-readable site profilerobots.txtand sitemap XML- AI crawler detection and lightweight request logging payloads
- GEO/SEO scoring and live website audits
- optional CodeClinch footer branding for sponsored installs
Install
npm install codeclinch-geoCLI
Beginner automatic setup:
npx codeclinch-geo install --site-name "CodeClinch" --site-url https://codeclinch.comThe installer detects the project type and creates the right files.
Check what will be recommended:
npx codeclinch-geo doctorSupported detection:
- Next.js App Router
- Next.js Pages Router
- Vite/static frontend projects
- Laravel
- plain static HTML
Safe file behavior:
npx codeclinch-geo installExisting files are skipped by default.
npx codeclinch-geo install --backupExisting files are backed up as .geo-seo-backup before replacement.
npx codeclinch-geo install --forceExisting files are overwritten.
Initialize a config file:
npx codeclinch-geo init --site-name "CodeClinch" --site-url https://codeclinch.comGenerate discovery files into public/:
npx codeclinch-geo generateThis creates:
public/llms.txt
public/ai-visibility.json
public/.well-known/agent.json
public/robots.txt
public/sitemap.xml
For a Next.js App Router project, install creates route handlers instead:
geo-seo.config.json
lib/geo-seo.ts or src/lib/geo-seo.ts
components/GeoSeoBranding.tsx or src/components/GeoSeoBranding.tsx
app/llms.txt/route.ts
app/ai-visibility.json/route.ts
app/.well-known/agent.json/route.ts
app/robots.txt/route.ts
app/sitemap.xml/route.ts
For Laravel, install creates public discovery files plus:
resources/views/partials/geo-seo.blade.php
resources/views/partials/geo-seo-branding.blade.php
CodeClinch Branding
Branding is enabled by default for sponsored installs:
const site = createGeoSeoConfig({
siteName: "Client Website",
siteUrl: "https://example.com",
description: "Client website description.",
branding: {
enabled: true,
label: "SEO & GEO powered by CodeClinch",
url: "https://codeclinch.com",
placement: "footer",
},
});Disable it for white-label clients:
const site = createGeoSeoConfig({
siteName: "Client Website",
siteUrl: "https://example.com",
description: "Client website description.",
branding: {
enabled: false,
},
});Use the helper anywhere:
import { generateBrandingFooterHtml } from "codeclinch-geo";
const footerHtml = generateBrandingFooterHtml(site);Score the local config:
npx codeclinch-geo scoreAudit a live website:
npx codeclinch-geo audit https://example.comBasic Usage
import {
createGeoSeoConfig,
generateAgentJson,
generateMetadata,
generateOrganizationSchema,
generateLlmsTxt,
generateAiVisibilityJson,
} from "codeclinch-geo";
const site = createGeoSeoConfig({
siteName: "CodeClinch",
siteUrl: "https://codeclinch.com",
description: "Web development, ecommerce, AI, SEO and GEO services.",
defaultImage: "/og-image.jpg",
organization: {
name: "CodeClinch",
logo: "/logo.png",
sameAs: ["https://www.linkedin.com/company/codeclinch"],
},
services: [
{
name: "Web Development",
description: "Fast, conversion-focused websites built for SEO and AI discovery.",
path: "/services/web-development",
keywords: ["web development", "Next.js", "SEO", "GEO"],
},
],
});
const metadata = generateMetadata(site, {
title: "Web Development Company",
description: "Build better, sell smarter, and rank higher with CodeClinch.",
path: "/",
});
const organizationSchema = generateOrganizationSchema(site);
const llmsTxt = generateLlmsTxt(site);
const aiVisibility = generateAiVisibilityJson(site);
const agentProfile = generateAgentJson(site);Next.js App Router
Create app/llms.txt/route.ts:
import { generateLlmsTxt } from "codeclinch-geo";
import { site } from "@/lib/geo-seo";
export function GET() {
return new Response(generateLlmsTxt(site), {
headers: {
"content-type": "text/plain; charset=utf-8",
},
});
}Create app/ai-visibility.json/route.ts:
import { generateAiVisibilityJson } from "codeclinch-geo";
import { site } from "@/lib/geo-seo";
export function GET() {
return Response.json(generateAiVisibilityJson(site));
}Create app/.well-known/agent.json/route.ts:
import { createNextAgentRoute } from "codeclinch-geo";
import { site } from "@/lib/geo-seo";
export const GET = createNextAgentRoute(site);Use metadata in a page:
import { generateMetadata as createPageMetadata } from "codeclinch-geo";
import { site } from "@/lib/geo-seo";
export const metadata = createPageMetadata(site, {
title: "Ecommerce Development",
description: "Online stores built for search, AI discovery, speed, and conversion.",
path: "/services/ecommerce-development",
});Static or Laravel Sites
You can generate text files at build time:
import {
createGeoSeoConfig,
generateLlmsTxt,
generateAiVisibilityJson,
generateRobotsTxt,
generateSitemapXml,
generateAgentJson,
} from "codeclinch-geo";
const site = createGeoSeoConfig({
siteName: "Client Website",
siteUrl: "https://example.com",
description: "Client website description.",
});
console.log(generateLlmsTxt(site));
console.log(JSON.stringify(generateAiVisibilityJson(site), null, 2));
console.log(JSON.stringify(generateAgentJson(site), null, 2));
console.log(generateRobotsTxt(site));
console.log(generateSitemapXml(site));Development
npm install
npm run typecheck
npm test
npm run build