Share cards, rich search results, robots.txt, an image sitemap and redirects for old addresses.

What it does

  • Share cards — Open Graph and Twitter meta tags on the public pages: home, listings, categories, tags, topics and profiles. A topic uses the first image of its first post when there is one; otherwise the default share image or the site icon.
  • Structured data — JSON-LD for search engines: WebSite with a search action on the home page, DiscussionForumPosting on topics (author, dates, reply count, likes, tags, section), ProfilePage on profiles, CollectionPage on lists and BreadcrumbList wherever the core draws breadcrumbs.
  • robots.txt — served at /robots.txt, keeping crawlers out of the admin, search, sign-in, settings, notifications, review queue, the API and cron, and pointing at the sitemap. Extra rules can be appended in the settings.
  • Image sitemap — the standard sitemap (home, visible categories, topics) plus the first image of each topic, through the core seo.sitemap hook. Deleted and hidden content stays out.
  • Redirects — old addresses are answered with 301/302 before the 404 page. Managed under Admin → Plugins → SEO & redirects.
  • 404 report — missed addresses, their hit counts and last visit, with a one-click "Redirect" form. No IP addresses or referrers are stored.
  • Verification tags — Google, Bing and Yandex meta tags from the settings.

Meta tags are only added to public pages. Pages the core marks noindex (for example the page right after posting a reply), the admin, settings, sign-in, registration and the API are never touched. Images must be https or files under /uploads, and all values are escaped for HTML or for a <script> context.

Settings

Admin → Plugins → SEO

  • Enable the SEO tools — master switch, default on.
  • Share cards — default on.
  • Structured data — default on.
  • Add post images to the sitemap — default on.
  • Serve /robots.txt — default on.
  • Record missed addresses (404) — default on. Redirects keep working with this off.
  • Default share image — full https:// address, used when a topic has no image.
  • X (Twitter) account — optional @handle for twitter:site.
  • Google / Bing / Yandex verification code — printed only when the value looks like a verification token.
  • Extra robots.txt rules — plain text, appended as written.

Admin page

Admin → Plugins → Plugins → SEO & redirects (also linked from the plugin settings drawer).

  • Redirects: old path, target, 301/302, visit count, edit and delete.
  • Missed addresses: the 100 most frequent, with hits and last visit. "Redirect" opens the form with the path filled in.
  • "Clear the report" empties the 404 table.

A redirect target can be a path on this site (/t/new-title-34) or a full https:// address. A path that already has a redirect is refused, and so is a target equal to the old path.

Data and maintenance

Two tables: plugin_tabre_seo_redirect and plugin_tabre_seo_miss. A daily cron job removes 404 rows older than 90 days and keeps the table under roughly 5000 rows (low-traffic rows go first). Uninstalling drops both tables.

When clean URLs are off, robots.txt also blocks the index.php?r=… form of each private address. Serving /robots.txt itself requires clean URLs, because the router reaches plugin pages through index.php otherwise.

Notes

  • No front-end JavaScript and no external requests.
  • The sitemap is rebuilt on each request and capped at 5000 topics, like the core sitemap.
  • Only the first image of the first post is listed: enough for search previews without turning the sitemap into an image archive.