---
title: "How to check RankReady is working"
url: https://hostmy.blog/docs/rankready/check-rankready-is-working/
date: 2026-08-24
modified: 2026-08-25
lang: en
author: "Aditya Sharma"
description: "Verify every RankReady endpoint with a browser and curl, and know what to do when one of them returns 404 or 403."
word_count: 817
---

# How to check RankReady is working

This page gives you a checkable pass or fail for each RankReady feature. Run it after install, after you change any toggle, and after any host or caching change. It takes about five minutes and it replaces guessing.

## Check 1: The endpoints load in a browser

Open each of these on your own site. Only test the ones you have turned on.

- `/llms.txt`, the AI-readable index of the site
- `/llms-full.txt`, the full corpus in one file
- `/index.md`, the homepage as Markdown
- `/{post-slug}.md` for a real published post
- `/okf/`, the [Open Knowledge Format](https://hostmy.blog/docs/rankready/what-is-open-knowledge-format/) bundle
- `/.well-known/mcp.json`, the [WebMCP manifest](https://hostmy.blog/docs/rankready/how-to-add-webmcp-wordpress/)

A pass is a 200 with the expected body. Markdown URLs should show YAML frontmatter at the top.

## Check 2: The robots.txt block is present

Open `/robots.txt`. You are looking for a managed block between `# BEGIN RankReady` and `# END RankReady`. Everything outside those markers belongs to WordPress or another plugin and RankReady leaves it alone.

Inside the block you should see your choices for the 29 named AI crawlers and your [Content Signals](https://hostmy.blog/docs/rankready/content-signals-robots-txt/) directives: `ai-train`, `search` and `ai-input`.

You will also see a mirrored group for Googlebot and Facebook's link crawler that repeats your existing `User-agent: *` rules. That is expected. It exists so scanners can see those agents named explicitly. It does not change their permissions.

## Check 3: Content negotiation on the canonical URL

This is the part a browser cannot show you, so use curl.

`curl -sI -H "Accept: text/markdown" https://yoursite.com/your-post/
curl -sI -H "Accept: text/html" https://yoursite.com/your-post/
curl -sI -H "Accept: application/x-nonsense" https://yoursite.com/your-post/`
Expected results on the canonical post URL:

- `Accept: text/markdown` returns Markdown.
- `Accept: text/html` returns HTML.
- An unsupported type returns **406**.

Now test the distinct Markdown URL:

`curl -sI -H "Accept: text/html" https://yoursite.com/your-post.md`
This still returns Markdown. That is deliberate. Distinct `.md` URLs always serve Markdown regardless of the Accept header, because a URL whose body changes with a header is unsafe to cache. If you were expecting HTML back, the plugin is behaving correctly and your expectation was wrong.

## Check 4: ETag and 304

`/llms.txt` and `/okf/` support ETag. Fetch the ETag, then send it back:

`curl -sI https://yoursite.com/llms.txt | grep -i etag
curl -sI -H 'If-None-Match: "PASTE_THE_ETAG_HERE"' https://yoursite.com/llms.txt`
The second request should return **304 Not Modified** with no body. If it returns 200 every time, a proxy or caching layer in front of your site is probably stripping the header.

## Check 5: Insights shows real crawler activity

Open **RankReady, Insights** (`tab=insights`). This is where AI crawler hits and AI referrals are logged. It works with no API key.

![The RankReady Insights tab listing recorded AI crawler activity](https://hostmy.blog/wp-content/uploads/2026/08/rr-insights-v2-scaled.png)Insights is a fetch log. Read it as one.

Read this screen carefully. A crawler hit proves your page was fetched. It does not prove it was quoted, cited, or used in any answer. If the log is empty shortly after install, that is normal. Crawlers arrive on their own schedule.

## When an endpoint returns 404

The usual cause is stale rewrite rules. Go to **Settings, Permalinks** and click **Save Changes** without changing anything. That regenerates the rules.

Some stacks intercept rewrites before RankReady sees them, LiteSpeed running with Rank Math being one reported combination. Version 1.3.0 added a raw request-path fallback for exactly this, so 404s from that cause are much less common than they were. Re-saving Permalinks still resolves any stale rules left over from an older version.

Also worth knowing: in earlier versions, turning a feature off could leave a raw 404 behind. Version 1.3.0 clears the stale rules when you toggle a feature off.

## When /.well-known/mcp.json returns 403

This one is almost always the server, not the plugin. Nginx blocks dotfile paths by default, so `/.well-known/` returns 403 before the request ever reaches PHP. No plugin can override that.

The fix is in the nginx site config:

`location ^~ /.well-known/ {
allow all;
default_type text/plain;
try_files $uri $uri/ /index.php?$args;
}`
Send that to your host if you cannot edit nginx yourself. Every other RankReady endpoint is unaffected by this. A 403 here does not mean your install is broken.

## Check 6: Schema on a post

View source on a post that has a generated summary and look for JSON-LD. You should find Article, and [FAQPage](https://hostmy.blog/docs/rankready/what-is-faq-schema/) if you generated FAQs.

If Article is missing, check the summary first. [Article schema](https://hostmy.blog/docs/rankready/add-article-speakable-schema/) requires a generated AI summary on that post. It builds its description from the summary and returns early when there is none, so a post with schema on but no summary emits no Article JSON-LD.

If Yoast, Rank Math, AIOSEO or SEOPress is active, RankReady merges into their graph rather than emitting a second block. Exactly one Article entry on the page is the correct result.

## Quick pass list

- `/llms.txt` returns 200.
- `/robots.txt` contains the RankReady block.
- A post `.md` URL returns Markdown with frontmatter.
- Canonical URL returns 406 for an unsupported Accept type.
- `/llms.txt` returns 304 on a matching `If-None-Match`.
- A post with a summary emits exactly one Article JSON-LD.