SEO and Discoverability
When Jetonomy is active it adds SEO metadata to every community page automatically: JSON-LD structured data, Open Graph and Twitter cards, canonical URLs, an XML sitemap, and per-space RSS feeds. No separate SEO plugin is needed for the /community/* routes. This page lists what is emitted, where it comes from in the code, and how to change it.
Everything here is in the free plugin unless marked Pro. Jetonomy renders its own
/community/*routes from custom tables (there is no WP post object), so general SEO plugins leave these URLs alone - Jetonomy owns their meta and schema.
Structured data (JSON-LD)
On every community page Jetonomy prints a <script type="application/ld+json"> block in wp_head, matched to the page type. Source: includes/seo/class-schema-markup.php.
| URL | Schema @type |
Rich-result intent |
|---|---|---|
/community/ (home) |
WebSite + SearchAction |
Sitelinks search box |
/community/s/{slug}/ (space) |
CollectionPage + ItemList |
Itemised topic list |
/community/s/{slug}/t/{slug}/ (Q&A topic with an accepted answer) |
QAPage (Question + Answer + Person) |
Q&A rich result |
/community/s/{slug}/t/{slug}/ (discussion topic) |
DiscussionForumPosting + InteractionCounter |
Forum-post rich result with vote + reply counts |
/community/tag/{slug}/ |
CollectionPage + ItemList |
Itemised tag list |
/community/u/{login}/ |
Person |
Author/profile |
| breadcrumbed pages | BreadcrumbList |
Breadcrumb trail |
QAPage and DiscussionForumPosting are the two schemas Google specifically documents for forum content, and the InteractionCounter nodes feed the up-vote and answer counts straight from your tables. Validate any page with Google's Rich Results Test.
Document titles
Titles are set through WordPress's document_title_parts filter, so they work with any theme. Two admin settings let owners shape them without code:
| Setting (under Jetonomy → Settings → SEO) | Applies to | Placeholders |
|---|---|---|
seo_post_title |
single topic pages | {post_title}, {site_name} |
seo_space_title |
space pages | {space_name}, {site_name} |
Leave a pattern empty to use Jetonomy's sensible default. {site_name} is expanded once - the WordPress separator already appends the site name, so you won't get it twice.
Open Graph & Twitter cards
Every community route emits og:title, og:description, og:url, og:image (+ og:image:alt), og:type, and a twitter:card. The image uses a fallback chain so a shared link still carries an image when a page has none of its own:
per-page image → seo_default_og_image setting → theme custom logo → site icon
Set a site-wide default under Jetonomy → Settings → SEO → Default OG image. Descriptions are clipped to 160 characters at emit time.
Canonical URLs
Each page emits a single <link rel="canonical"> pointing at its clean URL, so sort/filter query parameters (e.g. ?sort=top) don't fracture ranking signals across duplicates.
robots / noindex
Thin or duplicative surfaces (such as paginated tails) emit <meta name="robots" content="noindex, follow"> automatically - the links are still crawled, the page just isn't indexed. You can force or clear this per route with the filter below.
XML sitemap
Jetonomy registers two providers on WordPress core's sitemap (wp-sitemap.xml), so spaces and topics are submitted to search engines with no extra plugin (includes/seo/class-sitemap.php):
jetonomyspaces- every public spacejetonomyposts- every public topic
Visit https://yoursite.com/wp-sitemap.xml and you'll see the jetonomyspaces and jetonomyposts sub-sitemaps listed.
RSS feeds
Every space publishes an RSS 2.0 feed at:
/community/s/{slug}/feed/
The space page also includes an <link rel="alternate" type="application/rss+xml"> tag, so browsers and feed readers auto-discover it. Good for syndication, email-digest tools, Zapier/Make automations, and letting members follow a space without an account.
Customising any of it - the jetonomy_seo_meta filter
One filter sits in front of every meta tag Jetonomy emits. Return a modified payload to change titles, descriptions, canonical, OG image, card type, or noindex per route.
add_filter( 'jetonomy_seo_meta', function ( array $meta, array $data ) {
// $data['route'] is 'home' | 'space' | 'post' | 'tag' | 'profile' | ...
// $data['slug'] is the current space/topic/tag/user slug.
// Example: brand every share image on the leaderboard, and noindex search.
if ( 'search' === $data['route'] ) {
$meta['noindex'] = true;
}
return $meta;
}, 10, 2 );
The payload you receive and return:
| Key | Type | Controls |
|---|---|---|
title |
string | OG/Twitter title |
desc |
string | meta description (clipped to 160 chars on output) |
url |
string | canonical + og:url |
image |
string | og:image URL |
image_alt |
string | og:image:alt |
og_type |
string | og:type (default website) |
twitter_card |
string | twitter:card (default summary) |
noindex |
bool | emit robots noindex, follow |
article_meta |
array | article:* meta, keyed by property |
Running a general SEO plugin (Yoast, Rank Math)? Those plugins don't render Jetonomy's custom-table routes, so there's normally no conflict. If you do want your SEO plugin to own a route instead, return an empty title/desc from this filter for that route to suppress Jetonomy's tags.
SEO Pro (Pro)
The SEO Pro extension adds per-space control on top of the free baseline (jetonomy-pro, extension seo-pro):
- Per-space meta title, meta description, and OG image
- Per-space
noindex/nofollowand canonical base - Per-space sitemap priority and exclude-from-sitemap
- A
robots_txtfilter andwp_sitemaps_posts_query_argsintegration - A REST surface (
GET/POSTper-space SEO) so the controls are editable from the space admin UI
When SEO Pro is active it takes over the topic (post) route's baseline meta to avoid duplicate tags; free continues to own every other route.
Verify it yourself
# Structured data + meta tags on a topic page
curl -s 'https://yoursite.com/community/s/general/t/welcome/' | grep -E 'og:|twitter:|canonical|ld\+json|robots'
# Sitemap providers
curl -s 'https://yoursite.com/wp-sitemap.xml' | grep jetonomy
# A space feed
curl -s 'https://yoursite.com/community/s/general/feed/' | head -20
Related
- Hooks Reference -
jetonomy_seo_metaand every other filter - Template overrides - change the HTML around the content
- Theming & tokens - match your brand