Skip to main content
友田 陽大
Live

How to build a site AI answer engines will cite — 371 articles across 7 languages

An llms.txt, a CC BY 4.0 machine-readable dataset, and a test that checks the *deployed* robots.txt. How ProxyFacts was designed for answer engines first.

Why this is in a consulting portfolio

The entry point to search is shifting from ten blue links to a single AI answer. What makes a site citable is not simply having good articles — it is publishing facts in a form a machine can read. ProxyFacts was built on that premise.

Why I built it

Saying "we do AI-answer-engine optimization" is easy and unevidenced. The only way to have proof is to build and operate a site whose explicit goal is being cited by AI answer engines, end to end.

I chose proxy and scraping-infrastructure comparison as the subject: prices and specs change often, structuring facts genuinely pays off, and there is demand across many languages.

The hard part

Most of this work stops at "we did that" without ever being true in production.

You can add AI crawlers to robots.txt and have no guarantee the deployed file says so. You can emit hreflang and make things worse by declaring locales whose translations don't exist. You can ship an llms.txt that is quietly stale.

The other difficulty was that analytics on a young site return nothing. Using a fixed impression floor to find "almost ranking" queries returns zero rows for weeks.

The call I made (and what I gave up)

Turn every "we did that" into a test.

The AI-crawler allow-list lives in its own pure data module, and robots.txt is generated from it. On top of that there is a test that fetches the deployed production robots.txt and checks it against that same list. It verifies the output, not the configuration.

hreflang is computed per article from the set of translations that actually exist. Locales that haven't been translated are never declared.

What I gave up was publishing speed. 53 articles × 7 languages means each additional language raises the marginal cost of every article. I chose to keep the pillar-and-cluster structure intact across all languages rather than mass-produce shallow posts.

What actually ships

Pricing data is not something to be scraped out of article prose. It is published as a CC BY 4.0 machine-readable dataset at its own URL, with Dataset structured data attached. The reuse terms travel with the data, and the disclaimer ships as a field of the dataset so that context survives even when the data is lifted out on its own.

Locale design puts English at the root (cleanly serving as x-default) with the other six prefixed. zh targets Traditional Chinese (zh-Hant / zh_TW) and pt targets Brazil (pt-BR), with the language tag, hreflang value and OG locale kept as separate fields — reuse one string for all three and it is guaranteed to be wrong somewhere.

IndexNow submits only to the engines that participate, with the fact that Google does not participate noted in the code — so nothing that doesn't work is written up as though it does.

Search Console queries are classified as answer-engine fan-out or human and fed into an editorial backlog. Because a fixed floor returns nothing on a young site, the impression floor is adaptive.

Numbers counted from the code

72 commits between 2026-07-17 and 07-27. 53 articles × 7 locales = 371 MDX files, with 3 pillars and 50 clusters per locale. 69 test files against an 80% coverage floor.

CI runs a quality gate (content build → formatting → ESLint at zero warnings → type check → content validation → coverage) alongside a dependency audit, Gitleaks over full history, and Semgrep SAST.

The AI-crawler allow-list is 10 agents: GPTBot, OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, ClaudeBot, Claude-User, Google-Extended, Applebot-Extended and CCBot. A deploy verification confirms those 10 are actually present in production's robots.txt.

What this proves for your project

The page you are reading was built the same way. Structured data, llms.txt, hreflang, and the constraint that no number appears unless it can be counted — everything tried on ProxyFacts is applied to this portfolio itself. Reading about answer-engine optimization on a site that does it is the easiest kind of evidence to check.

Building hreflang across 7 languages from only the translations that exist, making data citable through a machine-readable dataset, and proving a measure actually reached production via a test — all of it ports directly to a content platform you are about to build.

I also take on multilingual content-platform design as fractional CTO / technical advisory.

Numbers counted from the code

Locales
7languagesEnglish at the root as x-default; ja / de / fr / es / pt / zh are prefixed
Articles
371files53 articles × 7 languages, arranged as 3 pillars and 50 clusters per locale
AI crawlers allowed
10agentsGPTBot, ClaudeBot, PerplexityBot and others — checked against the deployed production robots.txt by a test

FAQ

How independent is ProxyFacts?
It is independent. There are 5 affiliate partners, but the relevant links are forced to carry rel="sponsored nofollow" and the relationship is disclosed.
How many languages does it publish in?
7 locales. English sits at the root as x-default, with ja / de / fr / es / pt / zh prefixed, serving 53 articles × 7 languages = 371 MDX files.
How is hreflang generated?
Per article, from the set of translations that actually exist. Locales without a translation are never declared.
What does it do for AI answer engines?
It serves an llms.txt, publishes a CC BY 4.0 machine-readable pricing dataset at its own route with Dataset structured data, and names 10 AI crawlers in a robots.txt allow-list. That allow-list is backed by a test that fetches the deployed production robots.txt and checks it.
Does IndexNow work for Google?
No. Google does not participate in IndexNow, so that fact is noted in the code and submissions go only to the engines that do.
How are article topics chosen?
Search Console queries are classified as answer-engine fan-out or human and fed into an editorial backlog. Because a fixed impression floor returns zero rows on a young site, an adaptive floor is used.

同様の課題、抱えていませんか?

あなたのビジネス課題も、最新の技術で解決できます。 まずは30分の無料技術相談から、状況をお聞かせください。

自社の課題もSaaS化できるか相談する

プロジェクト単位(請負)・技術顧問、どちらにも対応可能です

View all indie products