Lightweight SEO plugin for WordPress - minimal footprint, maximum impact.
Website: lwplugins.com GitHub: github.com/lwplugins/lw-seo
- Custom Titles - Per-post/page title override with template variables
- Meta Descriptions - Auto-generated from the excerpt (through
get_the_excerpt(), so membership/paywall plugins can mask it), filterable vialw_seo_meta_description - Title Separator - Customizable separator character
- Canonical URLs - One self-referencing canonical per page (also on
/page/2/of archives), filterable vialw_seo_canonical_url - Robots Control - noindex/nofollow per post
- Open Graph - Facebook, LinkedIn sharing optimization
- Twitter Cards - Summary and large image cards
- Default Social Image - Fallback when post has no featured image
- Custom OG Images - Per-post social images
- Auto-generated - Posts, pages, categories, tags and WooCommerce products
- Custom Post Types - Every public CPT (ACF, CPT UI, …) is included automatically, with a per-type toggle
- Custom Taxonomies - Opt-in, per taxonomy
- Image sitemap - Featured, in-content and WooCommerce gallery images are listed (content inside shortcodes and non-media blocks is skipped); toggle under Sitemap → XML Sitemap → Include images
- Browser-readable view - XSL stylesheet so the sitemap is easy to read in a browser; can be turned off
- Clean - noindex types/taxonomies, noindex and password-protected posts, and the WooCommerce cart/checkout/my account pages are left out
- Developer filters -
lw_seo_sitemap_post_types,lw_seo_sitemap_exclude_post,lw_seo_sitemap_excluded_ids,lw_seo_sitemap_urls,lw_seo_sitemap_images,lw_seo_sitemap_content_images - Available at
yoursite.com/sitemap.xml(per-type files:sitemap-{type}.xml)
- Shortcode -
[lw_html_sitemap] - Block -
lw-seo/html-sitemap - Cached, and follows the XML sitemap's noindex and exclusion rules; configured under Sitemap → HTML sitemap (post types, taxonomies, items per section, order)
- Developer filters -
lw_seo_html_sitemap_sections,lw_seo_html_sitemap_output
- Off by default - turn it on under Sitemap → IndexNow
- Notifies participating search engines when public, indexable content is published, updated or deleted
- External service - when enabled, the page URLs, your host name, a verification key generated on your site and the key file URL are sent to
api.indexnow.org; no personal data. The key file is served by your site - Manual URL submit and a log of recent submissions in the same screen;
wp lw-seo indexnow
- WebSite Schema - Site-wide structured data
- Article Schema - Blog posts with author info
- Organization/Person - Knowledge graph support
- Breadcrumb Schema - Navigation markup
- Shortcode -
[lw_breadcrumbs] - PHP Function -
\LightweightPlugins\SEO\lw_seo_breadcrumbs() - Microdata - Built-in structured data
- Gutenberg block -
lw-seo/faqwith FAQPage schema
- llms.txt - Spec-compliant (llmstxt.org) file listing every page and custom post type in its own section, with SEO descriptions, custom summary/intro, an Optional links section and a per-section limit; cached and built as an anonymous visitor
- llms-full.txt - Optional full-content Markdown dump (1 MiB cap)
- Markdown endpoint - Every post, page, product and term as Markdown at
/mdor/markdown(or?format=md, orAccept: text/markdown), with YAML frontmatter,Vary: Accepton negotiated responses and discovery links (rel="alternate"/rel="describedby") - Content Signals - Three-state
search/ai-input/ai-trainsignals (Cloudflare Content Signals Policy) sent as aContent-Signalheader, meta tag and robots.txt line; per-post and per-term overrides - AI Crawler Control - 22 verified crawlers grouped by purpose, blockable one by one or per purpose (training / AI search / user-triggered): OpenAI (GPTBot, OAI-SearchBot, ChatGPT-User), Anthropic (ClaudeBot, Claude-SearchBot, Claude-User), Google-Extended, Applebot-Extended, Perplexity, Meta, Amazon, Mistral AI, Common Crawl, AI2, ByteDance
- robots.txt - Adds the sitemap, AI crawler rules and Content-Signal line through WordPress's
robots_txtfilter (compatible with other plugins); preview and physical-file warning in the admin
- Auto-Detection - Automatically enables when WooCommerce is active
- Product OpenGraph - Price, currency, availability, brand, condition
- Shop Title - Title template for the shop page (product archive)
- Product Schema - Full Schema.org Product markup with offers, filterable via
lw_seo_woo_product_schemaandlw_seo_woo_offer - Default Brand - Shop-wide brand used when a product has none
- ProductGroup - Optional ProductGroup markup for variable products (
lw_seo_woo_varies_by_map) - Shipping & Returns - Shipping details and merchant return policy added to product offers
- Hidden & Out-of-Stock Products - Hidden products get noindex and leave the sitemap; out-of-stock products can be left out of the sitemap
- Reviews Schema - Product reviews and aggregate ratings
- Product Sitemap - Include products and product categories
- Custom Settings - Dedicated WooCommerce SEO settings tab
- LocalBusiness Schema - 100+ business types supported
- Business Address - Street, city, state, zip, country
- Contact Info - Phone, email with schema markup
- Opening Hours - Per-day hours with OpeningHoursSpecification
- Geo Coordinates - Latitude/longitude for location
- Shortcodes -
[lw_address],[lw_phone],[lw_email],[lw_hours],[lw_map]
- Redirect Manager - 301, 302, 307, 410 and 451 redirects, with CSV import/export
- URL tester - Check which rule a URL would match, in the Redirects screen or with
wp lw-seo redirect test <url> - 404 log - Off by default; records missing URLs with hit counts, with a "Create redirect" action in the 404 tab, a daily cleanup and a row cap (
wp lw-seo not-found list|clear|prune) - 404 to homepage - Optional redirect of 404s to the homepage, as a last resort after your redirect rules and WordPress's own redirects (renamed slugs, guessed URLs)
- Import from Yoast SEO, Rank Math, SEOPress and All in One SEO - Options and title templates, post and term SEO data, primary categories and redirects, with a dry-run preview; never overwrites LW SEO data (admin Import tab or
wp lw-seo migrate, see docs/migration.md)
- Alt and title templates - Off by default; fill missing or empty image alt/title text at display time from
%%image_title%%,%%image_caption%%,%%image_filename%%and the usual variables (Content → Images). The media library is not modified.
- Remove shortlinks
- Remove RSD links
- Remove WLW manifest
- Unified LW Plugins menu
- Modern tabbed settings interface
- WordPress media library integration
- Translations: Hungarian (hu_HU) included
- WP-CLI -
wp lw-seo option|sitemap|llms|robots|crawlers|redirect|not-found|indexnow|migrate …— every setting can be read and set (validated) from the command line, see docs/cli.md - REST API - Read-only
lw-seo/v1endpoints for headless setups, see docs/rest-api.md - LW Site Manager abilities -
lw-seo/get-meta,set-meta,get-content-signals,get-markdown,get-options,set-options(per-object permission checks), see docs/site-manager-abilities.md - Hooks - including
lw_seo_post_noindex,lw_seo_woo_offer,lw_seo_woo_varies_by_map,lw_seo_html_sitemap_sectionsandlw_seo_html_sitemap_output; see docs/developers.md
composer require lwplugins/lw-seo- Download the latest release
- Upload to
/wp-content/plugins/lw-seo/ - Activate in WordPress admin
- Go to LW Plugins → SEO
Use these in title templates:
| Variable | Description |
|---|---|
%%sitename%% |
Site name |
%%sitedesc%% |
Site tagline |
%%title%% |
Post/page title |
%%sep%% |
Separator character |
%%excerpt%% |
Post excerpt |
%%author%% |
Author name |
%%date%% |
Publish date |
%%modified%% |
Last modified date |
%%category%% |
Primary category |
%%tag%% |
Tags |
%%term_title%% |
Taxonomy term name |
%%term_description%% |
Taxonomy term description |
%%currentdate%% |
Current date |
%%currentmonth%% |
Current month |
%%currentyear%% |
Current year |
%%page%% / %%pagenumber%% |
Page number |
%%searchphrase%% |
Search query |
%%image_title%% / %%image_caption%% / %%image_filename%% |
Image title, caption and file name (image alt/title templates only) |
Full reference: docs/template-variables.md
- PHP 8.0+
- WordPress 6.6+
LW SEO skips its head meta output (and shows a notice on its settings page) when detecting:
- Yoast SEO
- Rank Math
- All in One SEO
- SEOPress
# Install dependencies
composer install
# Run code sniffer
composer phpcs
# Fix coding standards
composer phpcbf
# Static analysis (PHPStan level 5)
composer analyse
# Run tests
composer testFull documentation: docs/ · Changelog: CHANGELOG.md
Special thanks to PixelDesigns for the countless hours of testing and the advice that shaped LW SEO.
GPL-2.0-or-later
Supported by Sinann
