{"id":251403,"date":"2025-09-11T20:17:27","date_gmt":"2025-09-11T20:17:27","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/llms-txt-suite\/"},"modified":"2025-09-11T20:32:29","modified_gmt":"2025-09-11T20:32:29","slug":"webdigit-llms-index-suite","status":"publish","type":"plugin","link":"https:\/\/es-cr.wordpress.org\/plugins\/webdigit-llms-index-suite\/","author":7944534,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"0.2.29","stable_tag":"0.2.29","tested":"6.8.5","requires":"6.2","requires_php":"8.1","requires_plugins":null,"header_name":"WebDigit LLMs Index Suite","header_author":"Webdigit","header_description":"Generate llms.txt, llms-full.txt, llms.json, images.md\/jsonld in \/wp-content\/uploads\/llms\/. Includes Markdown endpoints for posts and Context endpoints.","assets_banners_color":"141d2e","last_updated":"2025-09-11 20:32:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":237,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.29":{"tag":"0.2.29","author":"webdigit","date":"2025-09-11 20:32:29"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3360308,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3360308,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3360154,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3360308,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.29"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Dashboard with \u201cGenerate now\u201d and quick links"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[236374,2591,2516,244604,1557],"plugin_category":[49,55],"plugin_contributors":[223085],"plugin_business_model":[],"class_list":["post-251403","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-seo","plugin_tags-geo","plugin_tags-json-ld","plugin_tags-llms-txt","plugin_tags-sitemap","plugin_category-maps-and-location","plugin_category-seo-and-marketing","plugin_contributors-webdigit","plugin_committers-webdigit"],"banners":{"banner":"https:\/\/ps.w.org\/webdigit-llms-index-suite\/assets\/banner-772x250.png?rev=3360308","banner_2x":"https:\/\/ps.w.org\/webdigit-llms-index-suite\/assets\/banner-1544x500.png?rev=3360154","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/webdigit-llms-index-suite\/assets\/icon-128x128.png?rev=3360308","icon_2x":"https:\/\/ps.w.org\/webdigit-llms-index-suite\/assets\/icon-256x256.png?rev=3360308","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>WebDigit LLMs Index Suite<\/strong> makes your WordPress site <strong>GEO \/ AI-SEO ready<\/strong> by publishing compact, machine-readable indexes for AI agents.<\/p>\n\n<p><strong>Key features<\/strong>\n- <strong>Synchronized trio<\/strong>: <code>llms.txt<\/code>, <code>llms-full.txt<\/code>, <strong><code>llms.json<\/code><\/strong>\n- <strong>Image inventory<\/strong>: <code>images.md<\/code> (Markdown table) + <strong><code>images.jsonld<\/code><\/strong> (<code>ImageObject<\/code>)\n- <strong>Public URLs<\/strong>: <code>\/llms.txt<\/code> (root) and <code>\/llms\/*<\/code> (virtual directory)\n- <strong>REST API with caching<\/strong>: <code>GET \/wp-json\/wdlis\/v1\/index<\/code>, <code>GET \/wp-json\/wdlis\/v1\/images<\/code> (ETag + 304)\n- <strong>Automation<\/strong>: cron every 6h + <strong>WP-CLI<\/strong> (<code>wp llms-suite regenerate<\/code>)\n- <strong>Controls<\/strong>: include post types, exclude URL patterns, image MIME filters, customizable <strong>license meta key<\/strong>\n- <strong>Security<\/strong>: Only published content is indexed (drafts, private posts excluded)\n- <strong>Developer hooks<\/strong>: <code>wdlis_index_query_args<\/code>, <code>wdlis_index_entries<\/code>, <code>wdlis_images_query_args<\/code>, \u2026<\/p>\n\n<p><strong>Storage &amp; exposure<\/strong>\n- Files are written to <strong><code>\/wp-content\/uploads\/llms\/<\/code><\/strong>.\n- Public exposure is clean: <strong><code>\/llms.txt<\/code><\/strong> (root) and <strong><code>\/llms\/&lt;file&gt;<\/code><\/strong> served via rewrite rules (no write needed at web root).<\/p>\n\n<p><strong>Why this matters (GEO \/ AI-SEO)<\/strong>\nGenerative engines and AI copilots prefer <strong>clean, structured<\/strong> sources. This plugin publishes a compact <strong>text index<\/strong> plus a <strong>first-class image inventory<\/strong> to help LLMs discover and summarize your content reliably.<\/p>\n\n<blockquote>\n  <p>This plugin does <strong>not<\/strong> modify your existing robots.txt or sitemaps and does not call external APIs.<\/p>\n<\/blockquote>\n\n<h3>Developer Notes<\/h3>\n\n<p><strong>Filters<\/strong>\n\/**\n * Adjust the WP_Query for index entries.\n *\/\napply_filters( 'wdlis_index_query_args', array $args ): array;<\/p>\n\n<p>\/**\n * Final pass on index entries before output.\n * Each entry: ['url' =&gt; string, 'title' =&gt; string, 'lastmod' =&gt; string]\n *\/\napply_filters( 'wdlis_index_entries', array $entries ): array;<\/p>\n\n<p>\/**\n * Adjust the WP_Query for image entries (attachments).\n *\/\napply_filters( 'wdlis_images_query_args', array $args ): array;<\/p>\n\n<p>\/**\n * Decide if a URL\/file should be included after pattern checks.\n *\/\napply_filters( 'wdlis_index_url_should_include', bool $include, string $url, int $post_id, string $matched_pattern ): bool;\napply_filters( 'wdlis_images_should_include', bool $include, string $filepath, int $attachment_id, string $matched_pattern ): bool;<\/p>\n\n<p>REST<\/p>\n\n<p>GET \/wp-json\/wdlis\/v1\/index \u2192 JSON (with ETag headers)<\/p>\n\n<p>GET \/wp-json\/wdlis\/v1\/images \u2192 JSON-LD ItemList (with ETag headers)<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin:<\/p>\n\n<p>does not collect personal data,<\/p>\n\n<p>does not transmit data to remote servers,<\/p>\n\n<p>writes only static helper files to \/wp-content\/uploads\/llms\/.<\/p>\n\n<p>Site owners are responsible for the accuracy of license metadata on images and for excluding private\/PII content via settings.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> (or clone it there).<\/li>\n<li>Activate <strong>LLMs.txt Suite<\/strong> from <strong>Plugins<\/strong>.<\/li>\n<li>Go to <strong>Settings \u2192 LLMs.txt Suite<\/strong> and click <strong>Generate now<\/strong>.<\/li>\n<li>Verify public URLs:\n\n<ul>\n<li><code>https:\/\/example.com\/llms.txt<\/code><\/li>\n<li><code>https:\/\/example.com\/llms\/llms-full.txt<\/code><\/li>\n<li><code>https:\/\/example.com\/llms\/llms.json<\/code><\/li>\n<li><code>https:\/\/example.com\/llms\/images.md<\/code><\/li>\n<li><code>https:\/\/example.com\/llms\/images.jsonld<\/code><\/li>\n<\/ul><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='where%20are%20files%20stored%3F'><h3>Where are files stored?<\/h3><\/dt>\n<dd><p>In <code>\/wp-content\/uploads\/llms\/<\/code>. Public routes expose them at <code>\/llms.txt<\/code> (root) and <code>\/llms\/*<\/code> (virtual directory).<\/p><\/dd>\n<dt id='does%20this%20plugin%20change%20robots.txt%20or%20xml%20sitemaps%3F'><h3>Does this plugin change robots.txt or XML sitemaps?<\/h3><\/dt>\n<dd><p>No. It only reads public content and writes its own helper files. Your SEO stack remains unchanged.<\/p><\/dd>\n<dt id='how%20do%20i%20include%20or%20exclude%20content%3F'><h3>How do I include or exclude content?<\/h3><\/dt>\n<dd><p>In <strong>Settings<\/strong>:\n- Select <strong>post types<\/strong> to include.\n- Add <strong>exclude URL patterns<\/strong> (one per line, e.g. <code>\/tag\/<\/code>, <code>\/author\/<\/code>).\n- For images, pick <strong>MIME types<\/strong> and optionally exclude folders (e.g. <code>\/cache\/<\/code>, <code>\/tmp\/<\/code>).<\/p><\/dd>\n<dt id='what%20about%20image%20licenses%3F'><h3>What about image licenses?<\/h3><\/dt>\n<dd><p>Set the <strong>License meta key<\/strong> (default <code>license<\/code>). If present on an attachment, it will be surfaced in <code>images.md<\/code> and <code>images.jsonld<\/code>.<\/p><\/dd>\n<dt id='can%20i%20trigger%20generation%20via%20cli%20or%20schedule%20it%3F'><h3>Can I trigger generation via CLI or schedule it?<\/h3><\/dt>\n<dd><p>Yes. Cron runs automatically every 6 hours. WP-CLI:\nwp llms-suite regenerate [--only=index|images|all] [--force]<\/p><\/dd>\n<dt id='does%20it%20work%20on%20multisite%3F'><h3>Does it work on Multisite?<\/h3><\/dt>\n<dd><p>Network install is supported; generation runs <strong>per site<\/strong>. (A network \u201csuper-index\u201d is planned for a future version.)<\/p><\/dd>\n<dt id='does%20it%20phone%20home%20or%20collect%20data%3F'><h3>Does it phone home or collect data?<\/h3><\/dt>\n<dd><p>No telemetry and no external requests. All processing happens locally.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<p>MVP: llms.txt, llms-full.txt, llms.json, images.md, images.jsonld<\/p>\n\n<p>Public URLs (\/llms.txt, \/llms\/*), REST (ETag), cron (6h), WP-CLI<\/p>\n\n<p>Options (include\/exclude), developer hooks<\/p>","raw_excerpt":"Generate llms.txt, llms-full.txt, llms.json and AI-ready image indexes (Markdown + JSON-LD). Public URLs, REST API (ETag), cron and WP-CLI included.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/251403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=251403"}],"author":[{"embeddable":true,"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webdigit"}],"wp:attachment":[{"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=251403"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=251403"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=251403"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=251403"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=251403"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-cr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=251403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}