返回文章列表
Engineering2026年4月20日·15 分鐘閱讀

Three Things to Do First to Get Your B2B Site Cited by AI (Next.js Notes)

The AEO to-do list can run to 20 items, but 80% of the effect lives in three of them. Here's what we did on our own B2B site, with Next.js code.

The previous post covered what AEO is (When Users Start Asking ChatGPT, Can They Still Find You?). This one is about implementation. Online AEO guides routinely list 20 action items — but in practice, 80% of the effect is concentrated in three. Here's what we did on our own site (Next.js App Router + TypeScript).

Why Only Three

We spent an afternoon combing every AEO guide we could find and realized most items fall into two buckets:

  • Long game: FAQs, backlinks, E-E-A-T signals — all matter, but none pay off within a week
  • Minor gains: Open Graph tweaks, OG images, canonical — things SEO-era sites should do anyway; AEO doesn't amplify their importance

What actually determines whether AI can read you comes down to three things: can it get in, can it understand, does it know when you update. That maps to robots.txt, JSON-LD, and IndexNow.

#1: Let AI Bots Through robots.txt

Most-overlooked of the three. Plenty of companies block everything except Googlebot to "protect content" — the result: ChatGPT, Claude, and Perplexity don't know you exist.

public/robots.txt:

User-agent: GPTBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: Claude-Web
Allow: /

User-agent: anthropic-ai
Allow: /

User-agent: Google-Extended
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Perplexity-User
Allow: /

User-agent: Applebot-Extended
Allow: /

User-agent: *
Allow: /
Disallow: /admin/
Disallow: /api/

Sitemap: https://www.heiso.io/sitemap.xml

A few notes:

  • Google-Extended is not Googlebot — it controls what Google can use to train Gemini. List it separately.
  • Applebot-Extended is Apple Intelligence-specific, only introduced in 2024 — lots of old robots.txt files don't have it.

#2: JSON-LD Structured Data

This is what makes you readable. Plain-text pages are a blob to AI. JSON-LD hands it the subject–verb–object directly.

Minimum viable version: put Organization + WebSite schemas in your root layout so every page has them.

src/lib/schema.ts:

export function getOrganizationSchema() {
    return {
        '@context': 'https://schema.org',
        '@type': 'Organization',
        name: 'Heiso Digital',
        url: 'https://www.heiso.io',
        description: 'Heiso Digital provides custom software development, enterprise system integration, and AI Agent deployment.',
        sameAs: [
            'https://www.linkedin.com/company/heiso',
            // other social profiles
        ],
    };
}

src/components/JsonLd.tsx:

export function JsonLd({ data }: { data: object }) {
    return (
        <script
            type="application/ld+json"
            dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}
        />
    );
}

Drop it into root layout:

// src/app/layout.tsx
import { JsonLd } from '@/components/JsonLd';
import { getOrganizationSchema } from '@/lib/schema';

export default function RootLayout({ children }) {
    return (
        <html>
            <body>
                <JsonLd data={getOrganizationSchema()} />
                {children}
            </body>
        </html>
    );
}

Run your homepage through Rich Results Test — you should now see the Organization schema detected.

Going further: add Service schema to service pages, SoftwareApplication to product pages, FAQPage wherever you have a FAQ section. But getting Organization right already solves 60% of the "AI doesn't know who I am" problem.

#3: IndexNow for Instant Pinging

Sitemaps are passive — crawlers come when they feel like it. IndexNow is active — when you publish, you ping Bing, Yandex, and Naver to crawl you now. Google isn't on IndexNow, but ChatGPT rides on Bing's index, which makes IndexNow more important for AI search than Google Search Console.

Setup:

  1. Generate a key (any 32–128 chars): e.g. heiso-indexnow-2026-xyz789
  2. Put it as a file: public/heiso-indexnow-2026-xyz789.txt, content is just the key
  3. Write a notify function:
// src/lib/indexnow.ts
const KEY = 'heiso-indexnow-2026-xyz789';
const KEY_LOCATION = `https://www.heiso.io/${KEY}.txt`;

export async function notifyIndexNow(urls: string[]) {
    await fetch('https://api.indexnow.org/indexnow', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
            host: 'www.heiso.io',
            key: KEY,
            keyLocation: KEY_LOCATION,
            urlList: urls,
        }),
    });
}
  1. Call it when:
    • A new blog post is published
    • Service page copy is updated
    • A new landing page ships

We wire notifyIndexNow into the CMS publish hook — publish = auto-ping. Removes the "manually log into Bing Webmaster and click re-index" chore every time.

One Result: The Gap Two Weeks Later

Two weeks after shipping these three:

  • ChatGPT answering "what does Heiso do" now lists "custom software, enterprise system integration, AI Agent" — our three main service lines (previously: "I can't confirm that")
  • Perplexity surfaces our site as a source for our company name
  • Bing indexed page count went from 12 to 47

No ads, no backlinks, no new content. Just made existing content AI-readable.

Closing

AEO implementation can go deep, but the first step is just these three things. The hard part isn't the tech — three lines in robots.txt, ten lines of JSON-LD, a single fetch call for IndexNow — the hard part is deciding how you want AI to understand you. That answer takes thinking. Once you have it, the implementation is a one-day job.

If you want us to run an AEO audit on your B2B site, or just outsource these three tasks, happy to chat → Book a consultation

AEONext.jsJSON-LDrobots.txtIndexNow
更多文章

延伸閱讀