← Field notes

AEO

Our own site sold AEO and an answer engine could not read it

Our homepage returned 10,866 bytes containing two links, and 22 of 24 pages were invisible to every AI crawler. What was wrong, and what fixed it.

On 1 September 2026 we pointed our own audit at syntropicfoundry.com, because it is difficult to sell a diagnosis you have not run on yourself.

It failed.

The measurement

curl -s https://syntropicfoundry.com/ | wc -c
10866

10,866 bytes, and inside them two <a href> tags.

The header, the footer, the service cards and the call-to-action band were all custom elements, rendered by assets/js/components.js after the page loaded. Every internal link on the site existed only once JavaScript had run.

There was no sitemap.xml either. No robots.txt. No llms.txt. All three returned 404 on the live domain.

Why that splits into two different verdicts

For classic SEO this mostly survived. Googlebot renders JavaScript, comes back on a second pass, and finds the links.

For answer engines it did not survive at all. GPTBot, ClaudeBot, PerplexityBot, CCBot and Amazonbot fetch the file and read what is in it. With no rendering and no sitemap, there was no second path either.

22 of our 24 pages were undiscoverable to every AI crawler, on a site with a page that sells being found by exactly those crawlers.

What fixed it

The obvious fix is to write the header and footer markup into every page. We did not do that, because it means the markup exists in two places, and the first person to edit the footer in one and not the other makes every crawler read a footer no visitor has ever seen. That is cloaking by accident, and it is invisible in a browser.

So the build executes components.js in a sandbox and captures what it produces, then writes that output back inside the custom element tags. One definition of the header. The components still run in the browser and still overwrite the markup with their own, so a visitor sees exactly what they saw before. What changed is only what a client that does not run JavaScript receives.

The check that matters is a crawl from the homepage following only links present in the raw HTML, which is all those five crawlers ever see.

Before: 1 page. After: 24.

That crawl is now a test rather than a note, and it earned its place immediately by finding a service page sitting in the sitemap with no inbound link from anywhere on the site.

The part that was worse

While we were in there we found five things live that should not have been, none of which we were looking for.

Five invented client names under a heading reading "Trusted by operators". Template placeholders that had never been replaced. They are not reproduced here, because writing them into a published article is how a fake client name gets quoted back at you by the thing you removed it to protect.

A return-on-investment figure with a 90 day timeframe, as a headline metric and as a sentence, sitting directly above the template's own instruction to replace it with real case study numbers. Nothing anywhere in our records substantiates it.

Two placeholder UI strings rendering as visible controls on the resources page, six times.

Four page titles with the ampersand missing and a double space where it had been, caused by our own generator deleting HTML entities instead of decoding them.

Prerendering would have made all of it quotable by an answer engine, which is what turned this from untidy into urgent.

The invented names and the ROI figure are gone. What replaced the results section is a statement that client results get published once the client has given written permission and the figure carries a measurement date.

And one we missed until we were asked

The site had no privacy policy and no terms of service, and never had, while two forms collected name, business, email, phone, website and monthly ad spend.

That is the reverse of the position we had taken for our own clients three days earlier, when all three client sites got a privacy policy and terms at fetchable URLs specifically so a carrier verifying A2P messaging could load them. We built it for them and had not turned it on for ourselves.

The reason it was missed is that the audit ran against the three questions that had been asked, and legal pages were not on that list. That is the reason and it is not a good one.

Why this is published

Because the audit we sell finds exactly this class of thing, and the most honest demonstration available to a firm with no publishable client results is the one it ran on itself.

Run the first command in this article on your own homepage. It costs nothing and it takes four seconds.

All field notes → · RSS

Start here

This is the kind of thing the free audit turns up.

Send us the account. In 24 hours you get the wasted spend, the tracking gaps and the recoverable upside, and the findings are yours either way.

  • Audit back in 24 hours. Findings are yours either way
  • Owner-led. You brief the engineer, not an account manager
  • Engineered for revenue, not vanity metrics
  • AI woven through, not bolted on