AXRAY

Agent Experience report · spec v1.0.0 · 43m ago

instagram.com

https://instagram.com/

Reachability 66
Comprehension 26
Structure 23
Actionability 75
Agent Contract 17

Applying only the configuration-level fixes below would reach 87/100 — a gain of 45 points with no engineering work.

instagram.com scores 42/100 (E) for Agent Experience. Most of what matters on this page is not reaching agents at all. In AI answers you are effectively absent. The weakest pillar is Agent Contract at 17/100. The three highest-value fixes are ships structured data (+6.2 pts), publishes an llms.txt (+4.7 pts), publishes a sitemap (+4.1 pts). 22 of these are configuration changes rather than engineering work; applying just those would take the score to 87/100, a gain of 45 points.

15 failing · 14 warnings · 16 passing

Fix list, highest value first

Each item shows the points it is currently costing on the same 0–100 scale as the score at the top. Items marked config only are content or configuration changes that do not need an engineer.

Fail Ships structured data +6.2 pts config only

No JSON-LD and no microdata anywhere on the page.

Structured data is the only part of your page an agent can consume without interpretation. Everything else it has to infer, and inference is where it invents facts about you.

How to fix it

Add a JSON-LD block describing what this page actually is.

Where: Inside <head>, one block per page.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your company",
  "url": "https://example.com",
  "description": "One sentence an assistant can quote.",
  "sameAs": ["https://x.com/you", "https://github.com/you"]
}
</script>
Fail Publishes an llms.txt +4.7 pts config only

No /llms.txt or /llms-full.txt at https://instagram.com.

Without it, an assistant deciding what your site is about crawls whatever it happens to find. llms.txt is the cheapest way to control that first impression, and today most of your competitors do not have one either.

How to fix it

Publish an llms.txt: a title, one paragraph, then curated links grouped by intent.

Where: /llms.txt

# Example Inc

> One paragraph an assistant can quote verbatim about what you do and who it is for.

## Docs
- [Quickstart](https://example.com/docs/quickstart): Get running in five minutes.
- [API reference](https://example.com/docs/api): Every endpoint with examples.

## Product
- [Pricing](https://example.com/pricing): Plans, limits and exact prices.
- [Changelog](https://example.com/changelog): What shipped, newest first.

## Policies
- [Terms](https://example.com/terms)
- [Contact](https://example.com/contact): support@example.com
Fail Publishes a sitemap +4.1 pts config only

No sitemap found at https://www.instagram.com/sitemap/ig_seo_profile_sitemap_non_media_eligible.xml.gz or in robots.txt.

Without a sitemap, discovery depends entirely on crawlable links. Any page not reachable by a plain <a href> is invisible.

How to fix it

Generate a sitemap.xml and reference it from robots.txt.

Where: Append to /robots.txt

Sitemap: https://example.com/sitemap.xml
Fail Answer engines are allowed to crawl +3.4 pts config only

5 of 5 blocked by robots.txt: OAI-SearchBot, Claude-SearchBot, PerplexityBot, Amazonbot, DuckAssistBot.

These crawlers are the ones that put your link inside an AI answer. Blocking them removes the referral traffic, not just the training use.

  • OAI-SearchBot (OpenAI) - You will not appear as a source in ChatGPT search results.
  • Claude-SearchBot (Anthropic) - You will not be cited in Claude web search answers.
  • PerplexityBot (Perplexity) - You lose Perplexity citations, one of the highest-converting AI referral sources.
  • Amazonbot (Amazon) - Excluded from Alexa and Rufus style shopping answers.
  • DuckAssistBot (DuckDuckGo) - Excluded from DuckDuckGo AI assist answers.

How to fix it

Allow these crawlers explicitly in robots.txt. Indexes you so an assistant can cite and link you. Blocking it removes you from AI answers.

Where: /robots.txt

User-agent: OAI-SearchBot
Allow: /

User-agent: Claude-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Amazonbot
Allow: /

User-agent: DuckAssistBot
Allow: /
Fail Enough substance to be worth citing +3.2 pts

Only 68 words of readable text reached the agent.

There is not enough here for an assistant to build an answer from, so it will use someone else as the source.

How to fix it

Make sure the real content is in the HTML, then make sure there is enough of it.

Fail Exactly one <h1> naming the page +2.6 pts config only

The page has no headings at all.

Without an h1 the agent has no anchor for the document topic and falls back to the title tag or the URL slug.

How to fix it

Add a single <h1> at the top of the main content that states the page subject.

Fail Images carry alt text +2.6 pts config only

0 of 1 images have no alt attribute at all, 1 more are empty.

To an agent an undescribed image is a hole in the page. On product, chart and diagram pages that hole is usually the point of the page.

How to fix it

Describe what each image shows. Use alt="" only for purely decorative images.

<img src="/chart.png" alt="AX scores of the top 100 SaaS sites, median 41 out of 100">
Fail Signal-to-markup ratio +2.6 pts

0.2% of the payload is readable text.

The document is almost entirely machinery. An agent truncating this page will likely truncate before reaching any of your content.

How to fix it

Reduce inline script and serialized state; aim for at least 12% readable text.

Fail User-triggered fetchers are allowed +2.2 pts config only

3 of 3 blocked by robots.txt: ChatGPT-User, Claude-User, Perplexity-User.

These fetches happen because a human just pasted your link into an assistant. A block here fails in front of a real person who wanted to read you.

  • ChatGPT-User (OpenAI) - When a user asks ChatGPT to open your link, it fails in front of them.
  • Claude-User (Anthropic) - Claude cannot open your page when a user pastes the link.
  • Perplexity-User (Perplexity) - Live user-requested fetches from Perplexity fail.

How to fix it

Allow these crawlers explicitly in robots.txt. Fetches your page because a human asked an assistant to open it right now. Blocking it breaks a live request.

Where: /robots.txt

User-agent: ChatGPT-User
Allow: /

User-agent: Claude-User
Allow: /

User-agent: Perplexity-User
Allow: /
Fail Exposes an agent-callable manifest +2.0 pts

No /.well-known/mcp.json and no ai-plugin.json.

This is the highest-leverage unclaimed slot on the web right now. The sites that publish a callable surface get used directly instead of guessed at.

How to fix it

Publish a manifest naming what an agent can do with you and where to call it.

Where: /.well-known/mcp.json

{
  "schema_version": "2025-06-18",
  "name": "example",
  "description": "Search the catalogue and check availability.",
  "documentation": "https://example.com/docs",
  "servers": [
    { "type": "http", "url": "https://mcp.example.com" }
  ],
  "contact": "support@example.com"
}
Warn Content exists without running JavaScript +2.0 pts

Only 68 words arrived in the raw HTML. Some of the page is probably assembled in the browser.

Partial server rendering means agents see a fragment of your argument and may summarise you from the fragment.

How to fix it

Server-render the primary content of the page, not just the shell and navigation.

Fail Headings form a sane outline +1.9 pts config only

Only 0 headings on the page.

Agents chunk long pages by heading. A page with no outline is chunked arbitrarily and quoted out of context.

How to fix it

Break the content into sections with <h2> headings that read as answers to real questions.

Fail Main content is marked as such +1.9 pts config only

No <main> element. Landmarks present: footer.

Without a main landmark an extractor has to guess your content boundary heuristically, and on marketing pages it usually guesses the header.

How to fix it

Wrap the primary content in <main>, and each self-contained item in <article>.

<main>
  <article>
    <h1>…</h1>
    …
  </article>
</main>
Fail Uses semantic elements, not div soup +1.9 pts config only

1% semantic (1 semantic vs 121 div).

A page built entirely from divs communicates its structure only through CSS, which agents never load. The visual hierarchy you designed does not reach them.

How to fix it

Replace layout divs with section, article, nav, aside, figure and real list elements where they apply.

Warn Has a descriptive <title> +1.9 pts config only

The title is only 9 characters: "Instagram".

Very short titles force the assistant to guess at context and it will guess from the URL.

How to fix it

Expand the title to name both the page subject and the brand.

Warn Says when the content changed +1.7 pts config only

No Last-Modified, ETag, dateModified or <time> element anywhere.

Agents deprioritise content they cannot date, and re-fetch undated pages more often, which costs you bandwidth for nothing.

How to fix it

Send Last-Modified and ETag, and publish dateModified in your structured data.

{"@type":"Article","datePublished":"2026-01-15","dateModified":"2026-08-01"}
Fail Identity is machine-verifiable +1.7 pts config only

No Organization structured data on the page.

Entity resolution is how assistants decide two mentions are the same company. Unresolved entities get merged with, or mistaken for, someone else.

How to fix it

Publish Organization data with sameAs links to your verified profiles.

{"@context":"https://schema.org","@type":"Organization","name":"Example Inc","url":"https://example.com","logo":"https://example.com/logo.png","sameAs":["https://x.com/example","https://github.com/example","https://www.linkedin.com/company/example"]}
Warn Declares a canonical URL +1.5 pts

Canonical points to another origin: https://www.instagram.com/

Agents dedupe sources by canonical URL, and cross-origin canonicals hand your citation to somebody else.

Warn Declares content licensing +1.3 pts config only

No rel="license" link and no license or copyright fields in structured data.

If you care how your content is reused, say so where machines can read it. A footer copyright line is not machine-readable.

How to fix it

Declare the licence on the page and in your structured data.

<link rel="license" href="https://example.com/terms">
Warn Open Graph card is complete +1.2 pts config only

Missing: og:description, og:type.

When a page is JavaScript-heavy or truncated, Open Graph tags are frequently the only clean summary an agent gets.

How to fix it

Add the four core Open Graph tags plus an image.

<meta property="og:title" content="Page title">
<meta property="og:description" content="One sentence.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://example.com/page">
<meta property="og:image" content="https://example.com/og.png">
Warn Publishes security.txt +1.1 pts config only

No /.well-known/security.txt.

It is the standard machine-readable place to say who to contact. Agents and researchers both look there first.

How to fix it

Add a security.txt with a contact address and an expiry date.

Where: /.well-known/security.txt

Contact: mailto:security@example.com
Expires: 2027-01-01T00:00:00.000Z
Preferred-Languages: en
Fail Controls are real buttons +1.0 pts

2 div/span elements styled as buttons against 1 native controls.

Agents identify what they can click from element semantics. Styled divs are invisible as controls, so any flow gated behind one cannot be completed.

How to fix it

Use <button> for actions and <a href> for navigation. Style them, do not replace them.

Warn Programmatic surface is discoverable +0.8 pts config only

docs link: https://developers.facebook.com/docs/instagram

A docs link is a start, but nothing tells an agent where the machine-readable entry point is.

How to fix it

Publish a /.well-known/mcp.json or link your OpenAPI document from the page head.

Warn Site search is machine-usable +0.8 pts config only

No crawlable GET search form and no SearchAction.

Without a GET-addressable search, an agent looking for one specific page on your site has to fetch dozens of pages to find it, and usually gives up first.

How to fix it

Expose search at a GET URL like /search?q=… and declare it as a SearchAction.

Warn Declares a link preview card +0.8 pts config only

No twitter:* card tags.

Several agents fall back to card metadata when they cannot extract the body reliably.

How to fix it

Add a summary_large_image card.

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Page title">
<meta name="twitter:description" content="One sentence.">
Warn Reachable by a human, discoverably +0.7 pts config only

Only one weak contact signal found.

"How do I get in touch with them" is one of the most common agent-mediated questions about a company. Make the answer machine-readable.

How to fix it

Add a contactPoint to your Organization schema and link a real contact page.

{"@type":"Organization","contactPoint":[{"@type":"ContactPoint","contactType":"customer support","email":"support@example.com","url":"https://example.com/contact"}]}
Warn HTML payload stays inside an agent context budget +0.7 pts

462 KB of HTML, 54% of it inline script.

Agents truncate long documents. Anything past the cut simply is not read.

How to fix it

Move inline scripts and serialized state into external files so the HTML an agent reads stays small.

Warn Fields declare autocomplete tokens +0.5 pts config only

Only 1 of 2 text fields declare an autocomplete token.

These tokens are the closest thing the web has to a machine-readable form schema, and they cost one attribute each.

How to fix it

Add autocomplete tokens: email, name, organization, tel, street-address, country.

<input name="email" type="email" autocomplete="email">
Warn Form fields have stable names +0.5 pts config only

1 field without a name attribute.

Agents build form submissions from name attributes. Missing or randomised names make your form unusable to automation and fragile for everyone.

  • <input type="checkbox" name="">

How to fix it

Give each field a stable, human-readable name that survives your build.

Passing checks

Kept here so the report is auditable rather than a list of complaints.

Pass Page responds to a plain HTTP request

HTTP 200 in 866 ms.

The baseline: an agent with no browser, no cookies and no JavaScript received your page.

Pass No bot wall in front of the content

The response body was the real page, not a challenge or block screen.

Bot protection that cannot tell a shopping assistant from a scraper silently removes you from AI answers, with no error anyone on your team will ever see.

Pass robots.txt is present and parseable

robots.txt served with 36 user-agent groups.

A valid robots.txt is how you talk to crawlers before they read a single page.

Pass Classic search crawlers are allowed

All 2 crawlers in this group may fetch /.

AI Overviews and Copilot answers are grounded on the classic search index. Blocking Googlebot or Bingbot now also removes you from AI surfaces.

Pass No directive suppressing AI use of this page

Robots directives present and permissive: noarchive, noimageindex

noindex and nosnippet remove you from the surfaces that would otherwise quote and link you.

Pass Short redirect chain +0.2 pts

1 redirect before the final page.

Every hop costs latency and some agents cap redirects at two or three.

  • 301 https://instagram.com/ -> https://www.instagram.com/
Pass Responds fast enough for an agent budget

Full response in 866 ms.

Agents fetch many pages per answer and drop the slow ones. Speed is a ranking input you control.

Pass Declares a correct content type

Content-Type: text/html; charset="utf-8"

A declared charset avoids mojibake when an agent quotes your text back to a user.

Pass Has a meta description

94 characters: "Create an account or log in to Instagram - Share what you're into with the people who get you."

This is the summary assistants reuse verbatim more often than any other field.

Pass Declares a document language

<html lang="en">

Language is how an assistant decides whether to answer a user in your words or translate them.

Pass URL describes the content

Site root.

Assistants show the URL next to the citation, and readable URLs get clicked more than opaque ids.

Pass Navigation uses real links

All 18 links resolve to a real URL.

Real hrefs are the only navigation primitive an agent has.

Pass Link text describes the destination

100% of links have descriptive text.

Link text is how an agent decides which link to follow when it is looking for something specific.

Pass Links onward into the site

8 internal links give an agent somewhere to go next.

Agents explore a site breadth-first from whatever page they landed on. Dense internal linking is how the rest of your content gets found.

Pass Form fields are labelled

All 3 fields have an associated label or aria-label.

An agent filling a form on a user's behalf reads labels to decide what goes in each box.

Pass States an explicit AI policy

robots.txt names specific AI crawlers rather than relying on the wildcard group.

Naming crawlers explicitly is how you separate "do not train on me" from "do not send me traffic". The wildcard group cannot express that distinction.

Not applicable

These questions were not asked of this page, and are excluded from the score entirely.

n/a Real agent user-agents are served normally

Live user-agent probing was not run for this scan.

Some sites answer 200 to a generic client and 403 to a named AI crawler. Only a live probe finds that.

n/a Provides a no-JavaScript fallback

Not needed: the page already server-renders its content.

n/a Structured data parses cleanly

No JSON-LD to validate.

n/a Structured data describes the right thing

No JSON-LD to evaluate.

n/a Prices are machine-readable

No prices detected in the page text.

n/a Declares its place in the site

Top-level page; breadcrumbs are not expected.

n/a Inline microdata annotations

No microdata; JSON-LD is the preferred format anyway.

n/a llms.txt is actually useful

No llms.txt to evaluate.

Crawler access

Who can actually reach this page

Resolved from robots.txt for this exact path, per crawler. Blocking a training crawler is a legitimate business decision. Blocking an answer engine removes you from the results that would have linked you.

Answer engine

Indexes you so an assistant can cite and link you. Blocking it removes you from AI answers.

OAI-SearchBot OpenAI Blocked

Blocked by "Disallow: /" in the * group.

Claude-SearchBot Anthropic Blocked

Blocked by "Disallow: /" in the * group.

PerplexityBot Perplexity Blocked

Blocked by "Disallow: /" in the perplexitybot group.

Amazonbot Amazon Blocked

Blocked by "Disallow: /" in the amazonbot group.

DuckAssistBot DuckDuckGo Blocked

Blocked by "Disallow: /" in the * group.

User-triggered

Fetches your page because a human asked an assistant to open it right now. Blocking it breaks a live request.

ChatGPT-User OpenAI Blocked

Blocked by "Disallow: /" in the * group.

Claude-User Anthropic Blocked

Blocked by "Disallow: /" in the * group.

Perplexity-User Perplexity Blocked

Blocked by "Disallow: /" in the * group.

Classic search

Traditional search indexing, increasingly the substrate AI answers are built on.

Googlebot Google Allowed
Bingbot Microsoft Allowed

Training crawler

Collects content for model training. Blocking it is a legitimate business choice with no traffic cost.

GPTBot OpenAI Blocked

Blocked by "Disallow: /" in the gptbot group.

ClaudeBot Anthropic Blocked

Blocked by "Disallow: /" in the claudebot group.

Google-Extended Google Blocked

Blocked by "Disallow: /" in the google-extended group.

Applebot-Extended Apple Blocked

Blocked by "Disallow: /" in the applebot-extended group.

meta-externalagent Meta Blocked

Blocked by "Disallow: /" in the * group.

CCBot Common Crawl Blocked

Blocked by "Disallow: /" in the * group.

Evidence

What we actually received

Every number in this report comes from this one plain HTTP response. No browser, no JavaScript, no retries.

Raw observations from the fetch
ObservationValue
Final URLhttps://www.instagram.com/
HTTP status200 after 1 redirect(s)
Response time866 ms
HTML size462 KB
Inline script251 KB (54% of payload)
Readable words68
Text-to-markup0.2%
TitleInstagram
Languageen
Canonicalhttps://www.instagram.com/
Detected stackReact
robots.txtserved
sitemap.xmlnot found
llms.txtnot found

Share this report

Public report link, and a badge you can put in a README or a footer.

[![AX score](https://axray.online/badge/instagram.com.svg)](https://axray.online/report/Xt1xrIeXEma0vA)