VersionLicenseFlatboard

Flatboard Pro Plugin – This plugin is included in Flatboard Pro edition.

Overview

FlatSEO replaces Flatboard's native SEO layer with a complete, admin-controlled toolkit. It operates entirely through Flatboard's hook system — no template files or core files are modified.

At a glance:

AreaWhat FlatSEO does
TitlesGlobal format, homepage override, per-category template, per-page override
MetaDescription control at every level
SocialOpen Graph, Twitter/X Cards, Facebook App ID
Structured dataJSON-LD: WebSite, Organization, BreadcrumbList, DiscussionForumPosting, QAPage, ProfilePage
SitemapMulti-file XML sitemap, auto-invalidation on content change
Robots.txtFull custom editor
Redirections301/302/307/308, regex support, hit counter
AnalyticsGoogle Analytics 4, Google Tag Manager
VerificationGoogle, Bing, Yandex, Pinterest
IndexingNoindex rules for search, profiles, tag pages
AuditAutomated SEO scoring across all discussions
Rank TrackerManual keyword position history with chart

Installation

  1. Copy the FlatSEO/ folder into your plugins/ directory.
  2. Go to Admin → Plugins and activate FlatSEO.
  3. Access the SEO panel at Admin → FlatSEO (or /admin/seo).

No database migration required. All data is stored in plugins/FlatSEO/data/.


Feature Reference

1. Title Management

Admin → FlatSEO → General tab

Controls how the <title> tag is built for discussion pages and other standard pages.

Format options:

FormatOutput example
{title} {sep} {site_name}My Discussion \| My Forum
{site_name} {sep} {title}My Forum \| My Discussion
{title}My Discussion

Separator — configurable character(s) between the two parts. Common choices: | - ·

The format applies to discussion pages and any page that doesn't have a more specific override (see below).


2. Homepage SEO

Admin → FlatSEO → General tab → Homepage section

Allows you to set a title and description for the homepage that are completely independent of the forum tagline configured in the forum settings.

FieldPurpose
Homepage SEO titleFree text. Replaces the forum tagline in the <title> tag. Optimal: 30–60 chars.
Homepage descriptionFree text. Appears in Google search results. Optimal: 120–160 chars.

Example:

Forum tagline (in forum settings): "The Association Machin forum"
Homepage SEO title: "Forum for passionate people in Brittany"
→ Google sees the second one; the tagline is unchanged everywhere else.

Leave both fields empty to fall back to the default behaviour (forum tagline as title, forum description as meta description).


3. Category Templates

Admin → FlatSEO → General tab → Category section

Applies a global pattern to all category pages automatically, without needing to configure each one individually.

Available token: {category} — replaced at render time by the human-readable category name.

FieldExample valueResult for "Photography" category
Title templateForum {category} — Brittany DiscussionsForum Photography — Brittany Discussions
Description templateJoin Brittany enthusiasts discussing {category}. Share and grow.Join Brittany enthusiasts discussing Photography. Share and grow.

Priority: A per-page override (see below) always takes precedence over the global template. Use templates for the default, per-page for exceptions.

Leave both fields empty to use the global title format (section 1) and the category's native description.


4. Per-Page Overrides

Admin → FlatSEO → Per-page overrides tab

Full SEO control for any individual page: title, description, canonical URL, OG image, social title/description, robots directive, and focus keyword.

How to use

  1. Enter the page key in the input field and click Load.
  2. Edit the fields that appear.
  3. Click Save override.

Page key format

Page typeKey formatExample
Discussiondiscussion:{id}discussion:42
Categorycategory:{slug}category:photography
EasyPages pageeasypages:{slug}easypages:about-us
Homepagehomepagehomepage
User profileuser:{username}user:alice
Search resultssearchsearch
Tag pagetag:{slug}tag:php

Available fields per page

FieldDescription
SEO titleCustom <title>. Leave empty to use the template/default. Max 120 chars.
Meta descriptionCustom description tag. Optimal: 120–160 chars.
Canonical URLOverride the canonical link (useful for duplicate content).
OG image URLCustom image for Facebook/Twitter previews for this page.
OG titleSocial title, different from the SEO title if needed.
OG descriptionSocial description, different from the meta description.
Robotsnoindex, follow / index, nofollow / noindex, nofollow — per-page override.
Focus keywordComma-separated keywords. Used by the SEO score analyser.

Live SEO score

Click Analyse SEO after filling the fields to get an instant score (0–100) with a letter grade (A–F) and a detailed checklist:

  • Title length (optimal: 30–60 chars)
  • Description length (optimal: 120–160 chars)
  • Content word count (optimal: 300+ words)
  • Focus keyword in title
  • Focus keyword in description
  • Keyword density (optimal: 1–3%)
  • Image alt attributes

5. Open Graph & Social Cards

Admin → FlatSEO → Social & OG tab

Controls how pages are displayed when shared on social networks.

Twitter / X Cards

SettingOptions
Card typesummary_large_image (large banner, recommended) / summary (thumbnail)
Twitter site handleYour forum's Twitter/X username (without @)

Facebook

SettingDescription
Facebook App IDEnables Facebook Insights for your domain. Found in Meta for Developers.

Social profiles

URLs registered as sameAs properties in the Organization JSON-LD schema. Supported networks: Facebook, Twitter/X, LinkedIn, GitHub, YouTube, Instagram, Mastodon.

Default OG image

Admin → FlatSEO → General tab

Fallback image used when a page has no specific image. Recommended size: 1200 × 630 px.


6. Structured Data — JSON-LD

Admin → FlatSEO → Schema / JSON-LD tab

Each schema type can be enabled or disabled independently.

Schema typePagesWhat it does
WebSite + SearchActionHomepage onlyEnables the Google Sitelinks search box
OrganizationHomepage onlyDeclares your forum as an organisation with social links (sameAs)
BreadcrumbListAll pagesNavigation trail in search results
DiscussionForumPostingDiscussion pagesMarks discussions as forum content for rich snippets
QAPageDiscussion pages with a best answerFull Q&A schema with accepted answer
ProfilePageUser profile pagesPerson/ProfilePage schema for member profiles

All schemas are injected into the <head> via the seo.meta.after hook.


7. Sitemap XML

Admin → FlatSEO → Sitemap tab

FlatSEO overrides Flatboard's native /sitemap.xml route and generates a multi-file XML sitemap.

Structure

URLContent
/sitemap.xmlSitemap index listing all sub-sitemaps
/sitemap-discussions.xmlAll indexed discussion pages
/sitemap-categories.xmlCategory pages
/sitemap-pages.xmlEasyPages static pages
/sitemap-users.xmlUser profile pages (optional)

Configuration

SettingDescription
Include discussionsToggle discussions in the sitemap
Include categoriesToggle category pages
Include tagsToggle tag pages
Include EasyPagesToggle static pages (requires EasyPages plugin)
Include user profilesToggle user profile pages (disabled by default)
Discussion priorityDefault 0.8 (0.0 – 1.0)
Category priorityDefault 0.6
Change frequencyalways / hourly / daily / weekly / monthly / yearly / never

Auto-invalidation

The sitemap cache is automatically cleared whenever a discussion is created, updated, or deleted. A manual Regenerate now button is also available.


8. Robots.txt Editor

Admin → FlatSEO → Robots.txt tab

Full plain-text editor for your robots.txt file. Changes are saved to both the plugin's data directory and public/robots.txt for direct web server access.

The default content generated by FlatSEO:


User-agent: *
Allow: /

# Sensitive areas
Disallow: /stockage/
Disallow: /app/
Disallow: /admin/
Disallow: /api/
Disallow: /uploads/temp/

# SEO — avoid duplicate content
Disallow: /search

# Sitemap
Sitemap: https://yoursite.com/sitemap.xml

A quick-reference guide (common directives, known bot names) is displayed alongside the editor.


9. Redirections

Admin → FlatSEO → Redirections tab

Create and manage URL redirections without touching server configuration files.

Creating a redirection

FieldDescription
Source pathRelative path or regex pattern to match
DestinationTarget path or full URL
HTTP code301 (permanent) / 302 (temporary) / 307 / 308
Regex?Toggle to treat the source as a regular expression
ActiveEnable or pause the redirection without deleting it

Regex support

When the regex toggle is on, back-references ($1, $2…) can be used in the destination:


Source:      ^/old-category/(.+)$
Destination: /f/$1

Hit counter

Each redirection tracks how many times it has been triggered. Useful for identifying still-active old URLs.


10. Analytics & Verification

Admin → FlatSEO → Analytics tab

Google Analytics 4

Enter your Measurement ID (G-XXXXXXXXXX) to automatically inject the GA4 snippet before </body>.

Google Tag Manager

Enter your Container ID (GTM-XXXXXXX). GTM takes priority over raw GA4 — if both are configured, only GTM is injected.

Search engine verification

ServiceMeta tag injected
Google Search Console<meta name="google-site-verification" …>
Bing Webmaster Tools<meta name="msvalidate.01" …>
Yandex Webmaster<meta name="yandex-verification" …>
Pinterest<meta name="p:domain_verify" …>

All verification tags are injected in <head> via the seo.meta.after hook.


11. Noindex Rules

Admin → FlatSEO → Advanced tab

Global rules that automatically add noindex, follow to entire page types. Individual pages can still override this with a per-page robots setting.

RulePages affectedDefault
Noindex search results/search and all search URLs✅ Enabled
Noindex user profiles/user/* and /u/*❌ Disabled
Noindex tag pages/t/*❌ Disabled

12. SEO Audit

Admin → FlatSEO → SEO Audit tab

Scans all discussions and produces a score for each one.

Running an audit

Click Run audit. FlatSEO fetches all discussions, analyses each one, and caches the results. On large forums (500+ discussions) this may take a few seconds.

Score system

Each discussion is scored out of 100 and assigned a letter grade:

GradeScore range
A80 – 100
B60 – 79
C40 – 59
D20 – 39
F0 – 19

Checks performed

  • Title length (optimal: 30–60 chars)
  • Meta description length (optimal: 120–160 chars)
  • Content word count (optimal: 300+ words)
  • Focus keyword present in title
  • Focus keyword present in description
  • Keyword density in content (optimal: 1–3%)
  • Images with alt attributes
  • noindex status
  • Custom meta presence

Summary dashboard

The top of the audit page shows:

  • Total discussions scanned
  • Count of Good / OK / Bad / noindex pages
  • Average score across all discussions

Filters

Filter results by: All / Good / OK / Bad / noindex / No custom meta. Text search by title or keyword.

Export

Download the full audit as a CSV file for use in spreadsheets or reporting tools.

Quick edit

Each row has an edit button that opens the Per-Page Override panel pre-loaded with that discussion's data, allowing immediate fixes.


13. Rank Tracker

Admin → FlatSEO → Rank Tracker tab

A lightweight manual position tracker. Since automated SERP scraping is not available, positions are recorded manually.

Adding a keyword

FieldDescription
KeywordThe search term to track. Separate multiple keywords with commas to add them all at once.
Target URLOptional. The specific page you expect to rank for this keyword.
Search engineGoogle / Bing / DuckDuckGo / Other
NotesOptional internal notes

Recording a position

Click the + button on any tracked keyword, enter the position you observed in search results, select the date, and save. The position history is appended chronologically.

History chart

Click the chart icon to view a line chart of position history over time. The Y-axis is inverted (position #1=top=best). Points are colour-coded: green for top-3, blue for top-10, yellow for top-30.

Position badges

Current position is shown with a colour badge:

ColourRange
🟢 GreenPosition 1–3
🔵 BluePosition 4–10
🟡 YellowPosition 11–30
⚫ GreyPosition 31+

Priority Rules

When multiple sources could set the title or description for a page, FlatSEO applies this strict priority order:


1. Per-page override (highest — always wins)
2. Global homepage title/description (homepage only)
3. Global category template with {category} token (category pages only)
4. Global title_format template (all other pages)
5. Flatboard default (no FlatSEO intervention)

The same cascade applies to meta descriptions.


Page Key Reference

URL patternKeyType
/ or /forumshomepageHomepage
/d/{id}-{slug}discussion:{id}Discussion
/f/{slug}category:{slug}Category
/u/{username}user:{username}User profile
/page/{slug}easypages:{slug}EasyPages
/searchsearchSearch results
/t/{slug}tag:{slug}Tag page

Data Storage

All plugin data is stored in plugins/FlatSEO/data/ — no external database required.

FileContent
post_meta.jsonPer-page SEO overrides (indexed by page key)
redirections.jsonAll defined redirections
robots_custom.txtCustom robots.txt content
audit_cache.jsonLatest audit results cache
rank_tracker.jsonTracked keywords and position history

Global settings (title format, separator, JSON-LD toggles, etc.) are stored in Flatboard's main config under the plugins.flatseo.* namespace.


Hooks Used

FlatSEO registers itself on the following Flatboard hooks:

HookPurpose
seo.meta.beforeModify $title, $description, $image, $canonical, $extra by reference before <head> is rendered
seo.meta.afterInject JSON-LD scripts and verification meta tags
view.footer.scriptsInject GA4 / GTM scripts before </body>
app.routes.registerOverride /sitemap.xml, /robots.txt, and register all /admin/seo/* routes
view.admin.sidebar.itemsAdd the FlatSEO entry to the admin sidebar
discussion.createdInvalidate sitemap cache
discussion.updatedInvalidate sitemap cache
discussion.deletedInvalidate sitemap cache

Edited on  Mar 17, 2026  By  Fred .