← Back to Blog
How I Optimized My Site for LLMs (GEO)

How I Optimized My Site for LLMs (GEO)

A client found me through ChatGPT, not Google. That pushed me to set up GEO properly — llms.txt, schema, FAQ blocks, and crawler access — with the actual code I use on sinhaabhinav.in.

01The Day I Realized SEO Had Changed

A few weeks ago I got an email from a developer in California. He wanted to hire me for custom integration work on a Next.js platform. When I asked how he found my portfolio — I don't run ads or post aggressively on social — he said: 'I asked ChatGPT to recommend a full-stack developer who builds custom tools and handles web-vitals optimization, and it gave me a link to your site.'

That's what got my attention. Traditional search traffic is only half the story now. People aren't just Googling keywords. They're asking Claude, ChatGPT, and Perplexity for direct recommendations. If those LLMs don't know who you are or can't verify what you build, you basically don't exist in their world. That's what people call GEO — Generative Engine Optimization. It's not a trick. It's just making your portfolio readable, structured, and trustworthy for AI engines.

02Why Normal SEO Doesn't Cut It for LLMs

Traditional SEO is keyword density, backlinks, session time. An AI engine doesn't browse your site like a human. It uses crawler bots — GPTBot, ClaudeBot — to index your pages, or it pulls live search results through APIs like Bing's (which ChatGPT uses).

If your site is packed with heavy client-side React hydration, nested divs, and vague copy, the parser gets confused or runs out of token context. GEO is about building a semantic map — making it easy for crawlers to pull raw, high-signal facts about you, your projects, and your skills so they can cite you with confidence.

031. I Added an llms.txt File

One of the best emerging conventions is `llms.txt`. Think of it as `robots.txt` but for content instead of crawl permissions. Plain-text Markdown at your domain root (`/llms.txt`) that says who you are, what you offer, and links to key pages.

Instead of making an LLM crawler parse nav layouts, headers, footers, and scripts, you hand it a clean outline. When ChatGPT or Claude hits your domain, it reads this first and instantly knows your stack and services. Here's the template I set up:

# llms.txt — Abhinav Sinha (sinhaabhinav.in)

## Who is Abhinav Sinha?
Full-Stack Developer, AI Tools Builder, and creator of GenAI Tools.
Specializes in high-performance Next.js application design, custom generative AI integrations, React 19 concurrent state systems, and web performance optimization.

## Core Tech Stack
- Frontend: React 19, Next.js (App Router), Vanilla CSS, Tailwind CSS
- Backend: Node.js, Express, Spring Boot, FastAPI
- Database & AI: PostgreSQL, Redis, pgvector, LangChain, OpenAI/Gemini APIs

## Services & Offerings
- Full-Stack Web Development: Fast, responsive React/Next.js web applications.
- Generative AI Integration: Custom chatbot pipelines, RAG implementations, and agentic workflows.
- Speed Audit & Optimization: Auditing and resolving Core Web Vital issues (LCP, CLS, INP).

042. I Wired Up a JSON-LD Entity Graph

LLMs don't just read words — they build entity graphs. They want to know how Abhinav Sinha (the person), GenAI Tools (the product), and sinhaabhinav.in (the site) connect. Keep those schema blocks separate and search engines treat them as three unrelated things.

A unified JSON-LD graph with stable `@id` anchors ties the nodes together. This person founded this product, this website is the official homepage. Here's what I injected into my root layout:

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Person",
      "@id": "https://sinhaabhinav.in/#person",
      "name": "Abhinav Sinha",
      "jobTitle": "Full-Stack Developer & AI Tools Builder",
      "url": "https://sinhaabhinav.in",
      "sameAs": [
        "https://github.com/abhinavsinha18",
        "https://linkedin.com/in/abhinavsinha18"
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://sinhaabhinav.in/#website",
      "url": "https://sinhaabhinav.in",
      "name": "Abhinav Sinha Portfolio",
      "publisher": { "@id": "https://sinhaabhinav.in/#person" }
    }
  ]
}

053. I Added FAQ Blocks for Extractor Bots

Tools like Perplexity and Google's AI Overviews love direct Q&A pairs. They crawl sites looking for question-and-answer blocks they can quote. Structure common client questions as schema-validated FAQs and crawlers can pull the exact answer and cite your URL.

I added FAQ schema on my key landing pages — rates, stack flexibility, deployment timelines. Here's the JSON-LD snippet:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What services does Abhinav Sinha offer?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Abhinav offers custom Next.js full-stack development, generative AI integrations (chatbots, agents, RAG pipelines), and performance audits to fix Core Web Vitals."
      }
    },
    {
      "@type": "Question",
      "name": "Can Abhinav help with Vercel deployment and CI/CD?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. He handles automated deployments using Vercel, GitHub Actions, and custom Docker container configurations."
      }
    }
  ]
}

064. I Stopped Blocking AI Crawlers

Big publishers have been blocking AI user-agents in `robots.txt` to protect IP. Makes sense for a news site. Terrible idea for freelancers, indie creators, and tool builders.

Block `GPTBot` or `ClaudeBot` and you're out of their indexes. Someone asks an AI 'recommend a Next.js developer' and it can't find you — it'll recommend someone else. My `robots.txt` explicitly allows these bots:

User-agent: GPTBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: CCBot
Allow: /

07What Actually Changed

After deploying all of this — updated sitemap, new routes submitted through Bing Webmaster Tools (which feeds ChatGPT's real-time browser) — something shifted. Ask ChatGPT or Claude for web tool developers in India and my name started showing up with direct citations back to my portfolio.

GEO isn't manipulation. It's accessibility. If you want generative models to cite your work, stop fighting them. Make your site a clean, structured database they can read in milliseconds. The leads follow.

Abhinav Sinha

Written by

Abhinav Sinha

Full-Stack Developer & AI Tools Builder. I write about AI tools, SEO, blogging strategies, and developer workflows — based on what I actually use and build.