Visibility – Lightweight SEO for Search and AI

Description

Visibility is the SEO essentials without the suite. It covers what most sites actually need (meta tags, canonical URLs, Open Graph, JSON-LD schema, robots directives, redirects, AI discovery with llms.txt and Markdown for agents, robots.txt editor and native XML sitemap control) in about 254 KB, with no Pro tier, no upsell banners and nothing phoning home. It is built on WordPress core APIs (wp_robots, wp_sitemaps_*, register_post_meta, the Block Editor), so most of the work is the platform’s, already optimized.

Coming from Yoast, Rank Math, All in One SEO or SEOPress? Visibility imports your titles, descriptions, robots, Open Graph, schema and redirects in one click. The clean metadata it outputs is what search engines and AI assistants (ChatGPT, Perplexity, Gemini) read to understand and cite you: the AEO/GEO angle without the bloat.

Four modules, toggled independently from Overview:

  • Discover — meta title and description, Open Graph and Twitter Cards, Article/BreadcrumbList/Person JSON-LD with a selectable schema type per content type, FAQPage from Details and Accordion blocks, and Site Identity, plus AI discovery: llms.txt, Markdown for agents and a robots.txt editor. Author expertise feeds the Person schema, and a freshness filter flags stale content. Per-post and per-term overrides for all of it.
  • Indexing — bulk or per-item noindex / nofollow by post type and taxonomy, with rules for search, 404, date, paginated, attachment and author archives plus RSS feeds. Remove the base of any taxonomy one by one, pick a WooCommerce product URL structure, redirect attachment pages to their parent, all with 301s. Quick Edit, Bulk actions and a Robots column on your lists.
  • Sitemaps — control over the native XML sitemap: exclude post types, taxonomies, users, posts and terms; lastmod dates; 301s from old sitemap URLs; noindexed content stays out automatically.
  • Redirects — a lightweight 301 / 302 / 307 / 410 manager resolved in PHP (no .htaccess, no custom table, no 404 log), with CSV import / export, suggested redirects when you delete a post, and WordPress slug-change redirects you can take over.

Per-post controls live in the Block Editor panel and a matching Classic meta box. A Tools tab groups the importers and exports your configuration as JSON for another site.

Visibility replaces a full SEO suite rather than running alongside one (two would fight over the <head>), and warns you if another one is active.

Perfect companions

Visibility is fully independent — these plugins aren’t required — but they pair really well with it:

  • VigIA — AI visibility, crawler analytics, Site Identity JSON-LD on the home page. Visibility coordinates @id references with VigIA so both can add schema without duplicating the Organization or WebSite nodes.
  • Share Buttons & AI-powered Summaries — share buttons for social networks and AI assistants. Helps your content reach both audiences and language models.
  • AI Content Signals — control how AI systems can use your content (training, search, both) through robots.txt directives endorsed by Cloudflare.
  • Vigilante — all-in-one WordPress security: firewall, login protection, security headers, 2FA, file integrity monitoring.

External services

This plugin connects to Gravatar (operated by Automattic Inc.) to check whether the post or page author has a public Gravatar avatar, so it can be exposed in Open Graph tags (og:image) and in Person JSON-LD (image) for E-E-A-T.

What data is sent and when:

  • When a singular view is rendered and the Open Graph module is active, and no other image source exists (per-post og:image, featured image, WooCommerce gallery image, inline content image), the plugin sends an MD5 hash of the lowercased and trimmed author email to https://www.gravatar.com/avatar/{hash}?d=404 via wp_remote_head() (HEAD request, no body).
  • When an author archive is rendered and the Person schema module is active, the same probe is performed for that author.
  • The original email address is never sent — only an MD5 hash, which is the standard Gravatar lookup mechanism.
  • The result (found / not found) is cached for 24 hours in a transient so subsequent page loads do not hit Gravatar again.

This is the same mechanism WordPress itself uses to display Gravatar avatars in comments. Gravatar’s privacy policy: https://automattic.com/privacy/

Performance and security

«Lightweight» should be a measurement, not a slogan. These are the real numbers for this release, refreshed on every update.

Footprint (2.0.0)

  • Download size: about 254 KB zipped.
  • Codebase: 42 PHP files, roughly 21,200 lines of PHP.
  • Zero custom database tables. Settings live in a single autoloaded option; per-post, per-term and per-author values use native WordPress meta that is already in the object cache.
  • Zero cron jobs and no scheduled background processes.
  • Zero external HTTP calls, with a single exception: a cached Gravatar HEAD probe (24-hour TTL) that exposes the author avatar for E-E-A-T, the same lookup WordPress already performs for comment avatars.
  • Built on WordPress core APIs (wp_robots, wp_sitemaps_*, register_post_meta, get_canonical_url, the Block Editor), not private reimplementations, so most of the work is the platform’s and already optimized.

Security

  • Every release passes a security audit of the changed code (sanitization, escaping, nonces, capabilities, SQL) before it ships. It is a release gate, not an afterthought.
  • Minimal attack surface by design: no custom tables, no unauthenticated endpoints, output escaped where it is printed, input validated against allowlists, and prepared statements for every database query.
  • No premium tier, no telemetry, no data collection. Nothing phones home.

A smaller surface is a smaller target.

Support

Need private support or custom development?

Do you need one-on-one help, priority troubleshooting, or a custom feature, integration, or tweak built specifically for your site? I offer private support and custom development. Just contact me and tell me what you need.

Need help or have suggestions?

Love the plugin? Please leave us a 5-star review and help spread the word!

About AyudaWP

We are specialists in WordPress security, SEO, AI and performance optimization plugins. We create tools that solve real problems for WordPress site owners while maintaining the highest coding standards and accessibility requirements.

Screenshots

Installation

  1. Upload the native-aeo-pack folder to /wp-content/plugins/ or install through the Plugins screen.
  2. Activate the plugin.
  3. Open Visibility in the admin sidebar to review the active modules and tune the defaults.
  4. Done. Meta tags, robots directives and sitemap filters are applied automatically based on your settings.

FAQ

Does Visibility replace Yoast / Rank Math / AIOSEO?

For most sites, yes. Visibility covers what 90% of sites actually need: titles, meta descriptions, canonical URLs, Open Graph, schema, robots directives, redirect management and sitemap control — and it imports your per-post data from those plugins in one click. It does not include keyword analysis or content scoring. If you don’t need those, Visibility is a much lighter alternative. If you do, stick with your current SEO plugin — Visibility isn’t meant to run alongside.

How do I migrate from another SEO plugin?

Install and activate Visibility. If data from Yoast SEO, Rank Math, All in One SEO, SEOPress, The SEO Framework, Slim SEO or SureRank exists in your database (the suite can be active or already deactivated), the Tools tab shows an import card with a per-field breakdown: titles, meta descriptions and robots overrides on posts and on taxonomy terms, plus canonical URLs, Open Graph images, social titles and descriptions, the default social image, the per-content-type schema type and the webmaster tools verification codes. Your existing 301, 302, 307 and 410 redirects come over too, from Rank Math, All in One SEO, SEOPress and the Redirection plugin. One click copies it all into Visibility without touching the source plugin, skipping anything you already set here and any value built from the suite’s template variables (%%title%%, %title%, #post_title, {{ title }}) — Visibility generates those from your real content. Each suite imports what it actually stores; the per-field breakdown always shows exactly what was found before you import, and the import is non-destructive and idempotent: your existing Visibility values win and re-running never duplicates. Review a few entries, then deactivate the suite. Old sitemap URLs (sitemap.xml, post-sitemap.xml…) keep working through a 301 redirect to the native /wp-sitemap.xml.

I used Native SEO Meta Tags, NoIndexer or Sitemap Customizer. How do I migrate?

Install and activate Visibility. If it finds data from any of those plugins, the Tools tab shows an import card with a per-plugin breakdown and an «Import now» button (and Overview points you there). The import is non-destructive (it copies, never deletes) and your existing Visibility values win on any conflict, so you can run it safely. Once you’ve imported and checked everything, deactivate the old plugins.

Are there any database tables?

No. Visibility stores its settings in a single WordPress option and uses native post, term and user meta tables for per-content overrides. Deleting the plugin removes the option; per-content overrides remain so reinstalling does not lose your work.

Can I disable individual modules?

Yes. The Overview tab lets you toggle Discover (meta tags), Indexing (robots), Sitemaps and Redirects independently. You can run only what you need.

How does Visibility help with AI (AEO / GEO)?

It emits the signals AI search and assistants can read about your site: Site Identity JSON-LD (who is behind it), llms.txt and llms-full.txt (a Markdown index of your content, with taxonomy sections and WooCommerce-aware data), a clean Markdown version of every page at its .md URL, and a robots.txt editor to allow or block AI crawlers by name. No plugin can guarantee a citation, but Visibility makes your content easy for AI systems to find, read and attribute, and these are served on the fly with no extra files or cron. The companion plugin VigIA can then measure which AI crawlers actually visit.

Does it work with custom post types and custom taxonomies?

Yes. All public post types and taxonomies are supported — including WooCommerce product categories, tags and attributes (the latter requires «Enable Archives?» in the WooCommerce attribute settings).

Can I preview how my page will look on Google, social networks and AI answers?

Yes. The Visibility panel — in the Block Editor sidebar and in the Classic Editor meta box — includes a live preview with three views: your Google result snippet, your shared social card and an AI Overview citing your page. It updates as you type, following the exact fallback chains the plugin emits (post title, excerpt, featured image, site fallbacks). It is an honest render of what goes into your HTML, not a score: the final appearance always depends on each platform.

How do I set noindex on a single post?

In the Block Editor, open the Visibility panel in the post sidebar and tick the noindex toggle. In the Classic Editor, the same toggle is in the Visibility meta box. You can also use Quick Edit or Bulk Actions from the post list.

Does my robots.txt always work, even on a subdirectory install?

Yes, and this is an SEO safeguard worth knowing about. WordPress only serves its virtual /robots.txt on root installs once the rewrite rules have been flushed; on a subdirectory install, or when the rules go stale, /robots.txt can return a 404 while the same directives still answer at /?robots=1 — so crawlers asking for the canonical /robots.txt get nothing. Visibility takes ownership of the endpoint: it serves /robots.txt itself when there is no physical file (independent of the rewrite rules, so it works on any install), and when another plugin writes a physical robots.txt that the web server would serve instead, it merges its own directives into that file in a BEGIN/END block, leaving every other block untouched, so its rules prevail there too. It also 301-redirects WordPress’s internal /?robots=1 to /robots.txt. The result is a single canonical /robots.txt that always loads your AI-crawler and indexing rules, even behind a static file.

Does Visibility work on WordPress Multisite?

Yes, and each site keeps its own rules. Every site in the network has its own Visibility settings, so on a subdomain or mapped-domain network each one serves its own /robots.txt and /llms.txt from its own directives, with nothing to wire up by hand — something WordPress does not do on its own and most SEO plugins leave as a single global file. This matters because a physical robots.txt or llms.txt in the site root is one file shared by the whole install: Visibility writes it only where it genuinely belongs — a single-site install, or the main site of a subdirectory network — so one site can never overwrite another’s rules, and everywhere else the always-served virtual endpoints answer per site. On a subdirectory network (every site under one domain) the robots.txt standard allows only one file at the domain root, owned by the main site, and the Discover tab makes that clear wherever the physical-file option does not apply. Activate Visibility per site or network-activate it; either way, no site clobbers another.

Where does Visibility store per-post overrides?

In standard WordPress post meta (_native_aeo_pack_* keys). Term overrides go to term meta, user social URLs to user meta. Nothing leaves the standard WordPress tables.

Can I copy my configuration to another site?

Yes. The Tools tab exports every Visibility setting plus the per-entry and per-term values (meta titles and descriptions, canonical URLs, social overrides, schema types, robots flags) as a single JSON file, and imports it back on another site. Content is matched by slug, not by database ID, so it works between sites that were never clones: staging to production, or a starter configuration across several sites. On import you choose whether the file only fills in what is empty (the default, safe on a site that already has its own values) or replaces what is there. Everything goes through the same validation as the settings screen, only known keys are read, and nothing is ever created: values land on content that already exists, and the result tells you how many entries were not found. Redirects are not in the file because they have their own CSV export on the Redirects tab, and author profile fields stay out because they belong to each user account.

How do I know which content has gone stale?

Content freshness is the AEO signal with the strongest evidence behind it: pages updated in the last month get cited noticeably more often by AI assistants. With the threshold set in the Discover tab (90 days by default), your content lists get a «Not updated in 90 days» filter link with a count, and a sortable Last updated column. That is all it does: no score, no traffic light, no «SEO health» number, because which article deserves a rewrite is an editorial call. Set the threshold to 0 to leave your list tables untouched.

Can I clean up my WooCommerce URLs?

Yes, including the parts WooCommerce itself refuses to do. In the Indexing tab you can remove the base of each taxonomy independently, so a store can drop /product-category/, /product-tag/ and /brand/ while keeping /category/ on its blog, which the single toggle of earlier versions did not allow. And you can choose a product URL structure WooCommerce blocks on its own permalinks screen: the product slug alone (/my-product/), the category and the slug (/t-shirts/my-product/), or the full category path (/clothing/t-shirts/my-product/). WooCommerce puts the /product/ base back whenever you empty it and forces a base in front of a category structure, which is why those three need a plugin.

Old URLs are 301-redirected to the new ones, and so is any other combination that still resolves (a leftover base, a category the product no longer belongs to), so a product never ends up reachable at two URLs. The redirects are included: no premium tier for them. If you are running Premmerce Permalink Manager, Visibility detects it, tells you in the Indexing tab that both plugins are rewriting the same URLs, and takes precedence (its filters run last). Import its structure from the Tools tab first, check your product URLs, and then you can deactivate it, premium included. Two honest notes. Whatever already exists at a path wins, so a page or a term keeps its URL and the product stays on the one WooCommerce gave it. And a base-less taxonomy URL costs one rewrite rule per term, five counting feeds and pagination, so the settings screen tells you how many rules your selection adds before you commit to it: fine for a blog or a normal shop, worth a thought on a store with thousands of attribute terms.

Does Visibility generate FAQ structured data?

Yes, from the content you already have. Switch on JSON-LD: FAQPage in the Discover tab and Visibility reads the native Details and Accordion blocks in your entries, taking the question from the block heading and the answer from its content, and emits FAQPage in the same JSON-LD block as the rest of the schema. There is no separate builder or duplicate fields to fill in, so the markup can only ever describe Q&A that is genuinely visible on the page. It is off by default on purpose: a Details block is not always a question («Show technical details»), and describing something that is not a FAQ is worse than not describing it. Honest expectation: this helps AI assistants pick up your Q&A structure. It does not bring back Google’s FAQ rich results, which were retired in 2023.

Is there an API for plugins and themes?

Yes, and it stays stable. Read the robots state Visibility resolved with Native_AEO_Pack_Frontend_Robots::is_noindex( $post_id ), is_nofollow( $post_id ), is_term_noindex( $term_id, $taxonomy ) and is_term_nofollow( $term_id, $taxonomy ); read any setting with Native_AEO_Pack_Settings::get( $group, $key, $default ); and check the AI-crawler rules with Native_AEO_Pack_Settings::is_robots_ai_blocking() and get_robots_ai_agents(), which is how the companion plugin VigIA reads them.

To change what is emitted, four filters:

  • native_aeo_pack_schema_graph ($graph, $context, $object) — the JSON-LD nodes before they are printed. $context is article, person or identity. Add, edit or drop nodes; return an empty array to print nothing.
  • native_aeo_pack_meta_description ($description) — the resolved description, after the whole fallback chain. It feeds the meta tag, og:description, the Twitter card, the Article node and the preview alike.
  • native_aeo_pack_og_image ($image, $post) — the image chosen for a singular, after the per-post, featured, WooCommerce, inline and site-fallback chain.
  • native_aeo_pack_schema_faq_pairs ($pairs, $post) — the question/answer pairs read from the blocks, before they become FAQPage. Return an empty array to skip it on a page where Details blocks are not questions.

Reviews

1 de julio de 2026 1 reply
Llevo como 15 años en el tema de marketing y desarrollo web, y después de trabajar con Yoast y otros plugins que al final es un lío de opciones que cada vez valen menos, este plugin pone lo que es útil y necesario en tu web para que sea entendible y te puedes dedicar a lo importante. Además, el soporte es muy rápido si necesitas algo.
23 de junio de 2026
Perfect SEO plugin for anyone who wants essential SEO features without bloat. Lightweight, fast, and fully integrated with WordPress core. Includes everything needed for modern SEO, AEO, and AI visibility.
23 de junio de 2026
From what i’ve seen it has a lot already and apparently it plans to be a bigger one having pro features from other plugins for free so definitely giving it a try and prob gonna be my new SEO plugin from now on
Read all 3 reviews

Contributors & Developers

“Visibility – Lightweight SEO for Search and AI” is open source software. The following people have contributed to this plugin.

Contributors

“Visibility – Lightweight SEO for Search and AI” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “Visibility – Lightweight SEO for Search and AI” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

2.0.0

  • New: Premmerce Permalink Manager is detected, taken over and imported. Since Visibility now builds the same WooCommerce URLs, having both active is how a store gets redirect loops, so the Indexing tab names the conflict and says which one wins: Visibility, whose permalink filters run last. Its URL structure imports in one click from the Tools tab (product structure, product category and product tag bases), read from its own settings whether it is still active or already switched off. And you can drop it, premium included: the automatic 301 redirects it charges for are here.
  • New: A URL structure for your products that WooCommerce will not build. Choose the product slug alone (/my-product/), the category and the slug (/t-shirts/my-product/) or the full category path (/clothing/t-shirts/my-product/). WooCommerce reinstates the /product/ base whenever you empty it and forces a base in front of a category structure, so these three need a plugin, and the ones it does offer are left alone. Old URLs 301 to the new ones, and so does any other combination that still resolves, so a product is never reachable at two URLs. Whatever already exists at a path keeps it, and your rewrite rules do not grow.
  • New: The base of each taxonomy comes off on its own. One checkbox per taxonomy replaces the single toggle that removed /category/ and /product-category/ together: a store can now drop /product-category/, /product-tag/ and /brand/ while keeping /category/ on its blog. Sites upgrading with the old toggle on keep both bases stripped, exactly as before. The screen shows how many rewrite rules your selection adds, because a base-less URL costs one rule per term and you deserve to know that before saving.
  • New: FAQPage structured data from the blocks you already use. Switch it on in Discover and the native Details and Accordion blocks in your entries become FAQPage JSON-LD, question from the block heading, answer from its content, in the same schema block as everything else. No separate builder and no duplicate fields, so the markup can only describe Q&A that is genuinely on the page. Off by default, because a Details block is not always a question. It helps AI assistants read your Q&A structure; it does not bring back Google’s FAQ rich results, retired in 2023.
  • New: Author expertise in the Person schema. The user profile gains job title, topics of expertise and credentials, emitted as jobTitle, knowsAbout and hasCredential on author archives, plus WordPress.org profile and Facebook among the sameAs URLs. A WordPress.org profile is a verifiable credential a social account is not: it exposes the contributor résumé behind it. Author expertise is one of the few AEO signals with solid evidence behind it.
  • New: Content freshness in your lists. Pages refreshed in the last month get cited noticeably more often by AI assistants, so your content lists now carry a «Not updated in 90 days» filter with a count and a sortable Last updated column, over the modification date WordPress already stores, on every content type by default. No score, no traffic light: which article deserves a rewrite is your call. The threshold lives in Discover and 0 turns it off.
  • New: Tools tab with configuration export and import. Download every Visibility setting plus the per-entry and per-term values as one JSON file and load it on another site, matched by slug rather than database ID so staging to production works even between sites that were never clones. You choose whether the file only fills in what is empty or replaces what is there, everything is validated exactly as the settings screen validates it, and nothing is ever created. The one-click importers from other SEO plugins move here too, with Overview pointing the way when there is data waiting.
  • New: A public API, documented and stable. Four filters to change what is emitted (native_aeo_pack_schema_graph, native_aeo_pack_meta_description, native_aeo_pack_og_image, native_aeo_pack_schema_faq_pairs) and the helper methods to read the resolved robots state and settings, all written up in the FAQ so a theme or plugin can build on Visibility without touching its storage.
  • Improved: One breadcrumb trail per page on a store. WooCommerce emits its own BreadcrumbList on its pages, so Visibility no longer adds a second one there: its territory, its markup, the same way Visibility already leaves the Product schema to WooCommerce. Everywhere else nothing changes, and a filter brings ours back for a theme that prints no WooCommerce trail.
  • Improved: WooCommerce stores get a straight answer in Indexing. Cart, checkout and my-account need no setting, because WooCommerce marks them noindex itself. What Visibility does decide is the archives that usually repeat your shop listing: product tags and the attribute archives you enabled start out noindexed, with a notice naming them, while product categories and brands stay indexable. If an attribute archive is a page people search for, a plus-sizes archive say, untick it and save: it then gets the full treatment, meta title and description per term included.
  • Improved: Character counts under the meta title and meta description fields, in both the Block Editor panel and the Classic meta box. The figure only, with no colours and no threshold turning red: how long a title should be depends on the query, the device and the engine, and the preview underneath already shows what it looks like.

For older changelog entries, please check the changelog.txt file.