{"id":10566,"date":"2026-05-16T18:32:07","date_gmt":"2026-05-16T10:32:07","guid":{"rendered":"https:\/\/aeosub.com\/aj-agent-crawl-optimizer\/"},"modified":"2026-05-16T18:32:07","modified_gmt":"2026-05-16T10:32:07","slug":"aj-agent-crawl-optimizer","status":"publish","type":"post","link":"https:\/\/aeosub.com\/zh\/aj-agent-crawl-optimizer\/","title":{"rendered":"AJ Agent Crawl Optimizer"},"content":{"rendered":"<div class=\"plugin-info-card\" style=\"border: 1px solid #e2e8f0;border-radius: 10px;overflow: hidden;margin-bottom: 30px;font-family: -apple-system, system-ui, sans-serif;background: #fff\">\n<table style=\"width: 100%;border-collapse: collapse;font-size: 14px\">\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 15px 20px;text-align: left;width: 35%;color: #4a5568;background: #fcfcfc\"><img decoding=\"async\" src=\"https:\/\/ps.w.org\/aj-agent-crawl-optimizer\/assets\/icon-256x256.png?rev=3533689\" style=\"width: 40px;height: 40px;border-radius: 6px;margin-right: 12px;vertical-align: middle\"> Developer<\/th>\n<td style=\"padding: 15px 20px;font-weight: 500\"><a href=\"https:\/\/profiles.wordpress.org\/ajmaurya\/\" target=\"_blank\" rel=\"noopener\">Ajay Maurya<\/a><\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Version<\/th>\n<td style=\"padding: 12px 20px\">v1.0.0<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Active Installs<\/th>\n<td style=\"padding: 12px 20px\">0 +<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Requires \/ Tested<\/th>\n<td style=\"padding: 12px 20px\">5.5 \/ 6.9.4<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Last Updated<\/th>\n<td style=\"padding: 12px 20px\">2026-05-16 10:00am GMT<\/td>\n<\/tr>\n<tr>\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Official Link<\/th>\n<td style=\"padding: 12px 20px\"><a href=\"https:\/\/wordpress.org\/plugins\/aj-agent-crawl-optimizer\/\" target=\"_blank\" style=\"text-decoration: none;color: #4a3bca;font-weight: bold\" rel=\"noopener\">View Details \u2192<\/a><\/td>\n<\/tr>\n<\/table><\/div>\n<div class=\"plugin-short-desc\" style=\"margin: 20px 0;padding: 12px 15px;background: #f9fafb;border-left: 4px solid #4a3bca;border-radius: 6px;font-style: italic;color: #4a5568\">Make your WordPress site legible to AI agents \u2014 Markdown negotiation, JSON-LD, OpenAPI, MCP server card, llms.txt, IndexNow, and more.<\/div>\n<p><strong>AJ Agent Crawl Optimizer<\/strong> is a thin compatibility layer that teaches your site to speak the languages AI agents already use to discover and consume web content. It publishes machine-readable manifests at well-known URLs, serves clean Markdown when an AI requests it, and declares your AI-usage preferences \u2014 all without changing anything for human visitors.<\/p>\n<p>Each capability is a separate toggle under <strong>Settings <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> AJ Agent Crawl Optimizer<\/strong> and ships <strong>opt-in<\/strong> (everything starts off). On first activation, a one-time <strong>Quick Setup wizard<\/strong> suggests sensible defaults based on your environment (for example, it skips JSON-LD when an SEO plugin is detected so you don&#8217;t get duplicate structured data).<\/p>\n<h4>Discovery \u2014 help agents find what your site offers<\/h4>\n<ul>\n<li><strong>API Catalog<\/strong> (RFC 9727) \u2014 <code>\/.well-known\/api-catalog<\/code> linkset advertising your REST API, plus a <code>Link: rel=\"api-catalog\"<\/code> header on every response so agents discover it from any URL.<\/li>\n<li><strong>MCP Server Card<\/strong> (SEP-1649 draft) \u2014 <code>\/.well-known\/mcp\/server-card.json<\/code> describing the site to MCP-aware agents.<\/li>\n<li><strong>Agent Skills Index<\/strong> (RFC v0.2.0) \u2014 <code>\/.well-known\/agent-skills\/index.json<\/code> listing six skills (search, posts, pages, media, categories, tags) plus per-skill <code>SKILL.md<\/code> artifacts with verifiable sha256 digests.<\/li>\n<li><strong>llms.txt<\/strong> (per llmstxt.org) \u2014 <code>\/llms.txt<\/code> curated, LLM-readable index of your top pages and recent posts, with a Discovery section auto-linking every other plugin endpoint.<\/li>\n<li><strong>IndexNow<\/strong> \u2014 non-blocking ping to Bing and Yandex on every post publish so search engines re-crawl within minutes.<\/li>\n<\/ul>\n<h4>Presentation \u2014 format content for agents<\/h4>\n<ul>\n<li><strong>Markdown Negotiation<\/strong> \u2014 when a request includes <code>Accept: text\/markdown<\/code>, the page is served as clean Markdown with <code>X-Markdown-Tokens<\/code> for context budgeting. Browsers (which send <code>text\/html<\/code>) are completely unaffected.<\/li>\n<li><strong>JSON-LD Schema<\/strong> \u2014 Schema.org structured data: WebSite, Organization, Article, BreadcrumbList, and auto-detected FAQPage. Logo resolved from your theme&#8217;s custom logo or site icon.<\/li>\n<li><strong>OpenAPI 3.0.3<\/strong> \u2014 <code>\/?format=openapi<\/code> returns a complete spec generated dynamically from <code>rest_get_server()<\/code>, including plugin-registered REST routes.<\/li>\n<li><strong>WebMCP Tools<\/strong> \u2014 registers four tools (search, posts, pages, site info) via <code>navigator.modelContext.provideContext()<\/code> for browsers that support the W3C WebMCP draft.<\/li>\n<\/ul>\n<h4>Declarations<\/h4>\n<ul>\n<li><strong>Content-Signals<\/strong> \u2014 appends a <code>Content-Signal: ai-train=no, search=yes, ai-input=no<\/code> directive to robots.txt declaring your AI-usage preferences (per contentsignals.org). Composes with Yoast\/Rank Math\/AIOSEO \u2014 their additions are preserved, our line lands at the very end.<\/li>\n<\/ul>\n<h4>Why use it<\/h4>\n<ul>\n<li><strong>No conflicts with your SEO plugin.<\/strong> JSON-LD auto-suppresses when Yoast SEO, Rank Math, All in One SEO, SEOPress, The SEO Framework, Slim SEO, Squirrly SEO, Schema Pro, or SASWP is active.<\/li>\n<li><strong>Multisite-aware.<\/strong> Every endpoint also resolves at <code>\/{subsite}\/...<\/code> paths automatically.<\/li>\n<li><strong>Cached.<\/strong> OpenAPI is cached for a day, llms.txt for an hour, with proper invalidation on plugin activation, theme switch, post changes, and setting toggles.<\/li>\n<li><strong>Performance-conscious.<\/strong> Markdown handler runs at <code>PHP_INT_MAX<\/code> priority so it doesn&#8217;t break object-cache flushes or Query Monitor. IndexNow pings are non-blocking.<\/li>\n<li><strong>Extensible.<\/strong> Nine filter hooks let you customize skills, schemas, capabilities, and content. See &#8220;For Developers&#8221; below.<\/li>\n<li><strong>Accessible.<\/strong> Score-card SVG has dynamic <code>aria-label<\/code>, copy buttons announce success via <code>aria-live<\/code>, decorative arrows hidden from screen readers via CSS pseudo-elements.<\/li>\n<\/ul>\n<h4>For developers<\/h4>\n<p>The plugin exposes nine filter hooks for extension. Examples:<\/p>\n<pre><code>add_filter( 'ajaco_required_capability', function () { return 'edit_posts'; } );\n<\/code><\/pre>\n<p>Delegate plugin access to a non-admin role.<\/p>\n<pre><code>add_filter( 'ajaco_skill_definitions', function ( $skills ) { return $skills + [ 'products' =&gt; [ 'type' =&gt; 'information-retrieval', 'description' =&gt; 'WooCommerce products', 'endpoint' =&gt; rest_url( 'wc\/v3\/products' ) ] ]; } );\n<\/code><\/pre>\n<p>Register custom skills that ship in the Agent Skills Index and are served as SKILL.md artifacts with verifiable sha256 digests.<\/p>\n<pre><code>add_filter( 'ajaco_content_signal', function () { return 'ai-train=yes, search=yes, ai-input=yes'; } );\n<\/code><\/pre>\n<p>Customize the Content-Signal directive (e.g. permit AI training).<\/p>\n<p>Other hooks: <code>ajaco_api_catalog_linkset<\/code>, <code>ajaco_mcp_server_card<\/code>, <code>ajaco_json_ld_graph<\/code>, <code>ajaco_openapi_spec<\/code>, <code>ajaco_llms_txt_content<\/code>, <code>ajaco_active_seo_plugin<\/code>. The settings page&#8217;s Help tab <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> For Developers lists all of them with descriptions.<\/p>\n<h3>External services<\/h3>\n<p>This plugin connects to one external service, and only when the corresponding feature is explicitly enabled by the site administrator.<\/p>\n<h4>IndexNow (api.indexnow.org)<\/h4>\n<p>What it is and what it&#8217;s used for: IndexNow is an open protocol (originally from Microsoft Bing and Yandex) that lets sites notify search engines the moment a URL is published or updated, so search engines can re-crawl within minutes instead of days.<\/p>\n<p>When data is sent: only when the <strong>IndexNow<\/strong> feature toggle is turned on AND an IndexNow API Key is configured on the settings page. In that case, every time a post of a public post type transitions to the <code>publish<\/code> status, the plugin fires a single non-blocking HTTPS POST to <code>https:\/\/api.indexnow.org\/indexnow<\/code>.<\/p>\n<p>What data is sent: the request body is a JSON document containing exactly three fields \u2014 your site&#8217;s host (e.g. <code>example.com<\/code>), your IndexNow API key (which you generated yourself at Bing Webmaster Tools), and the permalink URL of the post that was just published. No visitor information, IP addresses, user-agents, or post content is sent.<\/p>\n<p>If the IndexNow feature toggle is off (the default), the plugin makes no outbound network requests of any kind.<\/p>\n<p>This service is provided by Microsoft (Bing) and the IndexNow project. Their terms and privacy policies apply:<\/p>\n<ul>\n<li>IndexNow protocol documentation: https:\/\/www.indexnow.org\/documentation<\/li>\n<li>IndexNow FAQ and terms: https:\/\/www.indexnow.org\/faq<\/li>\n<li>Microsoft Bing Webmaster Guidelines : https:\/\/www.bing.com\/webmasters\/help\/webmaster-guidelines-30fba23a<\/li>\n<li>Microsoft Privacy Statement: https:\/\/www.microsoft.com\/en-us\/privacy\/privacystatement<\/li>\n<\/ul>\n<h3>Privacy<\/h3>\n<p>AJ Agent Crawl Optimizer stores data <strong>only on your own server<\/strong> \u2014 there is no telemetry, no analytics, and no third-party logging. Specifically:<\/p>\n<h4>Local data<\/h4>\n<ul>\n<li>Plugin <strong>option rows<\/strong> in the WordPress options table store toggle states and the IndexNow API Key (stored as plain text \u2014 keep your database secure).<\/li>\n<li><strong>Transients<\/strong> cache the OpenAPI document and llms.txt body. These are deleted on plugin uninstall.<\/li>\n<li>No request data, IP addresses, User-Agents, or visitor information is recorded by the plugin.<\/li>\n<\/ul>\n<h4>Outbound network calls<\/h4>\n<p>The plugin makes exactly <strong>one<\/strong> outbound HTTP request, and only when explicitly enabled:<\/p>\n<ul>\n<li><strong>IndexNow<\/strong> \u2014 when the IndexNow toggle is on and a key is configured, the plugin sends a non-blocking POST to <code>https:\/\/api.indexnow.org\/indexnow<\/code> on every post publish. The payload contains the site host, the IndexNow key, and the URL of the published post (no visitor data).<\/li>\n<\/ul>\n<p>If the IndexNow toggle is off (the default), the plugin makes zero outbound network requests. All other features (manifests, JSON-LD, robots.txt) only respond to incoming HTTP requests; they never call out.<\/p>\n<h4>Cookies<\/h4>\n<p>The plugin does not set any cookies.<\/p>\n<h4>Uninstall<\/h4>\n<p>When the plugin is <strong>deleted<\/strong> (not just deactivated), all plugin options, the IndexNow key, and all transients are removed from the database. Multisite networks have every site cleaned in turn.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Make your WordPress site legible to AI agents \u2014 Markdown negotiation, JSON-LD, OpenAPI, MCP server card, llms.txt, IndexNow, and more.<\/p>","protected":false},"author":1,"featured_media":9317,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[252],"tags":[550,608,930,931,894,555],"class_list":["post-10566","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trends","tag-ai","tag-llms-txt","tag-mcp","tag-openapi","tag-structured-data","tag-wordpress-plugin"],"_links":{"self":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/10566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/comments?post=10566"}],"version-history":[{"count":0,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/10566\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media\/9317"}],"wp:attachment":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media?parent=10566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/categories?post=10566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/tags?post=10566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}