Agent Experience report · spec v1.0.0 · 54m ago
instagram.com
https://instagram.com/
Applying only the configuration-level fixes below would reach 89/100 — a gain of 39 points with no engineering work.
instagram.com scores 50/100 (D) for Agent Experience. An agent can reach this page and takes away a distorted version of it. Expect to be described inaccurately in AI answers. The weakest pillar is Structure at 23/100. The three highest-value fixes are ships structured data (+6.2 pts), publishes a sitemap (+4.1 pts), answer engines are allowed to crawl (+3.4 pts). 20 of these are configuration changes rather than engineering work; applying just those would take the score to 89/100, a gain of 39 points.
13 failing · 13 warnings · 20 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 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: /
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 llms.txt is actually useful +1.8 pts config only
Present but thin. Missing: an H1 with your name, a one-paragraph blockquote summary, at least two "##" sections, at least four annotated links.
The format only helps if it is curated. The value is in the annotations telling an assistant why each link matters.
How to fix it
Follow the llms.txt shape: H1, blockquote summary, then "## Section" groups of annotated links.
Warn Says when the content changed +1.5 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.5 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.2 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">
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 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
467 KB of HTML, 55% 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 1034 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 1034 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 Programmatic surface is discoverable
/.well-known/mcp.json; /.well-known/ai-plugin.json; /.well-known/agent.json; docs link: https://developers.facebook.com/docs/instagram
When an agent can call your API it stops scraping your HTML, which is cheaper for you and more reliable for the user.
Pass Publishes an llms.txt
https://instagram.com/llms.txt served 20000 bytes.
llms.txt is the one file written for assistants rather than browsers: a curated map of what matters on your site, in the order you want it read.
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.
Pass Exposes an agent-callable manifest
https://instagram.com/.well-known/mcp.json is served.
A callable manifest turns you from something an agent scrapes into something an agent uses. Almost nobody has one yet, which is exactly why it is worth having.
Pass Publishes security.txt
/.well-known/security.txt is served.
It is the standard machine-readable place to say who to contact. Agents and researchers both look there first.
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.
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.
Blocked by "Disallow: /" in the * group.
Blocked by "Disallow: /" in the * group.
Blocked by "Disallow: /" in the perplexitybot group.
Blocked by "Disallow: /" in the amazonbot group.
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.
Blocked by "Disallow: /" in the * group.
Blocked by "Disallow: /" in the * group.
Blocked by "Disallow: /" in the * group.
Classic search
Traditional search indexing, increasingly the substrate AI answers are built on.
Training crawler
Collects content for model training. Blocking it is a legitimate business choice with no traffic cost.
Blocked by "Disallow: /" in the gptbot group.
Blocked by "Disallow: /" in the claudebot group.
Blocked by "Disallow: /" in the google-extended group.
Blocked by "Disallow: /" in the applebot-extended group.
Blocked by "Disallow: /" in the * group.
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.
| Observation | Value |
|---|---|
| Final URL | https://www.instagram.com/ |
| HTTP status | 200 after 1 redirect(s) |
| Response time | 1034 ms |
| HTML size | 467 KB |
| Inline script | 257 KB (55% of payload) |
| Readable words | 68 |
| Text-to-markup | 0.2% |
| Title | |
| Language | en |
| Canonical | https://www.instagram.com/ |
| Detected stack | React |
| robots.txt | served |
| sitemap.xml | not found |
| llms.txt | 0 sections, 0 links |
Share this report
Public report link, and a badge you can put in a README or a footer.
[](https://axray.online/report/WaqU7QFyl8L-uA)