Blog Reference
Taxonomy, RSS, sitemap, metadata, and related-posts logic for SGEN Blog.
Blog in SGEN is the time-series content surface built into SG-Core. Each post is a dated record. Posts are organized by categories and tags. Categories form a hierarchy; tags are free-form. The engine emits RSS for every category and for the full blog, generates sitemap entries for every published post and category archive, and surfaces related posts based on shared taxonomy. This page is the structural reference for how all of those systems work.
What is this for?
Read this page when you need to know:
- how blog categories are structured and how slugs are assigned,
- how tags differ from categories and when to use each,
- how RSS feeds are generated and what they include,
- which posts and archives appear in the XML sitemap,
- how related-posts logic selects content,
- what per-post metadata fields are available,
- or how category and tag archives are routed.
For operator how-to — creating categories, writing posts, scheduling, setting featured images — open SG-Admin Blog. For the underlying post-type model, open Pages & Posts.
Scope
This reference covers:
- the category taxonomy (hierarchy, parent/child, slug rules, archive routing),
- the tag taxonomy (free-form, flat, slug rules, archive routing),
- RSS feed generation (per-category feeds, full-blog feed, what is included),
- sitemap inclusion rules (published posts, category archives, tag archives),
- related-posts logic (algorithm, weighting, override),
- per-post metadata fields (excerpt, featured image, scheduling, canonical URL, custom meta),
- and category vs tag decision guidance.
This reference does not cover:
- the SG-Builder Posts component that renders blog content in templates (that lives in SG-Builder documentation),
- operator UI flows for creating and managing posts (that lives in SG-Admin Blog),
- or per-release changes to blog behavior (those appear in the Changelog).
Where to find it
Blog is accessed from the sidebar under SG-Core > Blog. The Posts list is the default view. Category management is under SG-Core > Blog > Categories. Tag management is under SG-Core > Blog > Tags.
The RSS feed URL for the full blog is:
https://<your-site-domain>/feed/Per-category RSS feed URL:
https://<your-site-domain>/category/<category-slug>/feed/Reference
Categories
Categories are the primary hierarchical taxonomy for blog posts. Every post should carry at least one category. Categories support a parent/child hierarchy up to unlimited depth, though more than two levels (top-level → sub-category) is uncommon in practice.
| Property | Behavior |
|---|---|
| Hierarchy | Parent/child, unlimited depth |
| Slug | Derived from category name on creation. Editable. Lowercase, hyphen-separated. |
| Archive URL | /category/<slug>/ for top-level; /category/<parent-slug>/<child-slug>/ for nested |
| Default category | "Uncategorized" exists by default. Posts saved without a category are assigned to Uncategorized. |
| Post count | Displayed on the category admin list. Excludes draft and private posts. |
| Deletion | Deleting a category reassigns its posts to the configured fallback category (Uncategorized by default). |
Slug rules
Category slugs are generated from the category name on creation. Spaces become hyphens. Characters outside the URL-safe character set are stripped. Casing folds to lowercase. The slug is editable after creation; changing a slug changes the archive URL. The engine does not auto-create redirects from old category URLs — if a category slug changes, any inbound links to the old archive URL will return a 404 until the operator adds a redirect via the Redirects pillar.
Hierarchy and archive URLs
A top-level category Brewing Guides produces the archive at /category/brewing-guides/. A child category Espresso under Brewing Guides produces the archive at /category/craft-guides/ceramics/. The parent category archive includes posts assigned directly to the parent; it does not automatically include posts assigned only to a child category. A post assigned to Espresso appears in /category/craft-guides/ceramics/ but not in /category/brewing-guides/ unless it is also explicitly assigned to the parent.
Tags
Tags are the flat, free-form taxonomy for blog posts. A post can carry zero or more tags. Tags are not hierarchical — there are no parent/child tag relationships. A tag is created the moment it is first assigned to a post.
| Property | Behavior |
|---|---|
| Hierarchy | None — flat taxonomy |
| Slug | Derived from tag name on creation. Editable. Lowercase, hyphen-separated. |
| Archive URL | /tag/<slug>/ |
| Creation | Auto-created on first use, or pre-created from the Tags management screen |
| Deletion | Deleting a tag removes the tag from all posts that carry it. The posts are not deleted. |
| Post count | Displayed on the tag admin list. Excludes draft and private posts. |
Tag slug rules
Tag slug generation follows the same rules as category slugs. Tag slugs are editable; changing a tag slug changes the tag archive URL. The engine does not auto-create redirects from old tag archive URLs.
Category vs tag: decision guidance
The distinction is structural, not semantic. Use categories when the content must be organized into a discoverable, navigable hierarchy. Use tags when the content needs multiple parallel labels that do not fit a single hierarchy.
| Question | Category | Tag |
|---|---|---|
| Does this organize content into a tree visitors can browse? | Yes | No |
| Can a post belong to more than one at once without confusion? | Rarely | Yes |
| Does this appear in the site navigation? | Typically | Rarely |
| Is this a primary classification? | Yes | No |
| Is this a supplementary label? | No | Yes |
| Does this need an RSS feed of its own? | Yes (auto-generated) | No (tag archives have no RSS by default) |
A post about a new Ethiopia Yirgacheffe roast fits in the New Arrivals category (primary, navigable, RSS-worthy) and carries tags yirgacheffe, single-origin, new-arrival (supplementary, cross-cutting, not worth a dedicated feed). The category is the structural home; the tags are the cross-cutting descriptors.
RSS feed generation
The engine generates RSS feeds automatically. No operator action is required beyond publishing posts.
| Feed | URL | Contents |
|---|---|---|
| Full blog feed | /feed/ | 10 most recent published posts, all categories |
| Category feed | /category/<slug>/feed/ | 10 most recent published posts in that category |
| Category + children feed | Not available — category feeds are per-level, not hierarchical | — |
| Tag feed | Not available by default | — |
| Author feed | /author/<username>/feed/ | 10 most recent published posts by that author |
RSS feed items include:
- Post title
- Post URL (permalink)
- Publication date (in RFC 2822 format)
- Author name
- Category name(s)
- Excerpt (if set) or truncated body content (first 55 words)
- Featured image (as
<enclosure>or<media:content>depending on feed reader negotiation)
The feed item count (default 10) is a site-level setting under Blog configuration. Changing the count affects all feeds. There is no per-category feed item count override.
<item><title>Brewing Guide 2026: Extraction Ratios Explained</title><link>https://yoursite.com/brewing-guide-2026-extraction-ratios/</link><pubDate>Tue, 20 May 2026 09:00:00 +0000</pubDate><author>sarah@yoursite.com (Sarah Okonkwo)</author><category>Brewing Guides</category><description>A precise extraction ratio is the difference between a flat shot and a balanced one. This guide covers the 1:2 to 1:3 range...</description><enclosure url="https://yoursite.com/media/brewing-guide-hero.jpg" type="image/jpeg" length="184320"/></item>Sitemap inclusion rules
The XML sitemap at /sitemap.xml includes blog content according to these rules:
| Content type | Included | Condition |
|---|---|---|
| Published posts | Yes | Status = Published and post is not set to noindex |
| Draft posts | No | — |
| Scheduled posts | No — added after publish time passes | — |
| Private posts | No | — |
| Category archives | Yes | Category has at least one published post |
| Tag archives | Yes | Tag has at least one published post |
| Uncategorized archive | No by default | Configurable in Blog settings |
Post sitemap entries include:
- Post URL (permalink)
- Last modified date (most recent save date)
- Change frequency (
weeklydefault; configurable per-post) - Priority (
0.6default for posts;0.4default for category archives; configurable)
Category archive entries appear in the sitemap even if the category has child categories with more posts than the parent — the archive URL exists and is indexable regardless of how deep the hierarchy goes.
Related-posts logic
Related posts are surfaced by the engine on post detail pages. The algorithm determines which posts are "related" to the current post.
Algorithm:
- Find all published posts that share at least one category with the current post.
- Score each candidate post:
- +3 points per shared category
- +1 point per shared tag
- Sort candidates by score descending, then by publication date descending for ties.
- Return the top N results (default: 3).
| Variable | Default | Configurable |
|---|---|---|
| Result count | 3 | Yes, in Blog settings |
| Category weight | +3 | No |
| Tag weight | +1 | No |
| Include same-author posts | No | No |
| Exclude current post | Always | — |
A post with no shared categories with any other published post will have no related posts surfaced. Tags alone do not drive the related-posts output — at least one shared category is required.
Override: Individual posts can carry a manual related-posts override. When set, the override list replaces the algorithm output entirely. The override accepts up to 6 post IDs. Posts in the override list do not need to share any taxonomy with the current post.
Per-post metadata
Each blog post carries a set of metadata fields in addition to its title and body content.
| Field | Description | Required | Default |
|---|---|---|---|
| Title | Display title. Used in RSS, sitemap, related-posts. | Yes | — |
| Slug | URL slug. Derived from title on creation. Editable. | Yes | Auto-generated |
| Excerpt | Short summary. Used in RSS, listing templates, related-posts cards, search results. | No | Auto-generated from first 55 words if blank |
| Featured image | Primary image. Used in listing cards, RSS enclosure, social sharing. | No | — |
| Category | Taxonomy assignment. One or more categories. | Recommended | Uncategorized |
| Tags | Supplementary taxonomy. Zero or more tags. | No | — |
| Publish date | The date and time the post goes live. | Yes | Current datetime on Publish action |
| Author | The attributed author. Linked to a user account. | Yes | Logged-in user |
| Status | Draft / Published / Scheduled / Private | Yes | Draft |
| Canonical URL | Override for the canonical <link> tag. Leave blank to use the post's own URL. | No | Post permalink |
| Meta title | Override for the <title> tag in search results. Leave blank to use the post title. | No | Post title |
| Meta description | Override for the <meta name="description"> tag. Leave blank to use the excerpt. | No | Excerpt |
| noindex | Flag to exclude this post from search engine indexing and the sitemap. | No | false |
Scheduling
Scheduling sets a future publish date and time. The post status changes from Scheduled to Published automatically when the scheduled time passes. Scheduled posts are not visible to public visitors until the status flips to Published. The publish time uses the site's configured timezone — set under Site Settings > General > Timezone. A post scheduled for 09:00 on a site configured to Asia/Manila (UTC+8) will publish at 09:00 Manila time, not UTC.
Featured image
The featured image is drawn from Media Library. It is not embedded in the post body; it is a separate metadata attachment. Templates can choose to display the featured image above the post title, in listing cards, in RSS feed enclosures, and in social-sharing og:image tags. A post without a featured image will use the site's default OG image fallback for social sharing.
Excerpt
The excerpt is a short summary of the post. When left blank, the engine auto-generates an excerpt from the first 55 words of the post body, stripping HTML tags. The auto-generated excerpt is used in RSS, listing templates, and meta description fallback. Setting an explicit excerpt overrides the auto-generated one everywhere it appears.
Examples
Example 1 — A specialty roastery sets up a category hierarchy for their blog
The team runs a specialty goods retail site. Their blog covers brewing technique, product news, and company story. They create three top-level categories: Brewing Guides, Product News, Our Story. Under Brewing Guides they add two child categories: Espresso and Filter. Under Product News they add New Arrivals.
Posts about espresso technique get assigned to Espresso (child of Brewing Guides). Posts about new beans get assigned to New Arrivals (child of Product News). Posts about the company's sourcing philosophy get assigned to Our Story.
Each category has its own RSS feed. A product enthusiast subscribing to /category/craft-guides/ceramics/feed/ receives only craft technique posts, not product news. The sitemap includes all three top-level archives and both child archives.
Example 2 — Related posts drive content discovery
A visitor reads a post about Ethiopia Yirgacheffe in the New Arrivals category with tags yirgacheffe, single-origin, new-arrival.
The related-posts algorithm finds all published posts in New Arrivals. It also checks Product News (the parent category is not auto-included — only directly assigned categories count). It scores shared-tag overlap as a tiebreaker.
The result: three related posts appear at the bottom of the page — all from New Arrivals — ordered by score then recency. A post tagged new-arrival and single-origin that shares two tags scores higher than a post that shares only new-arrival.
Example 3 — Scheduling a product launch post with precise timing
The marketing team plans a post announcing a new tote bag for June 1 at 09:00 Manila time. They write the post, assign it to Product News > New Arrivals, add tags merchandise, tote, new-arrival, attach the product photo as featured image, and set the publish date to 2026-06-01 09:00. The site timezone is Asia/Manila.
The post status shows as Scheduled. It does not appear on the blog index, in RSS, or in the sitemap until 09:00 Manila time on June 1. At that moment the status flips to Published automatically. The post appears in the full-blog RSS feed, the New Arrivals RSS feed, and the sitemap within the next cache cycle.
Edge cases
A category is deleted while it still has posts. Posts are reassigned to the configured fallback category (Uncategorized by default). The deleted category's archive URL returns 404 immediately. Inbound links and search index entries pointing to the old archive URL will land on a 404 until the operator adds a redirect via the Redirects pillar.
A category slug is changed after the category has been in the sitemap. The old archive URL returns 404. The new URL appears in the sitemap on next regeneration. The engine does not auto-redirect. Add a redirect from the old slug to the new one in Redirects.
Two posts are scheduled for exactly the same time. Both publish. Publication order for same-time posts is not guaranteed — do not rely on second-precision ordering.
A post is published, then set back to Draft. The post immediately disappears from the public blog index, RSS feeds, and related-posts output. The sitemap entry is removed on next regeneration. The post permalink returns 404 for public visitors. Inbound links to the post URL will 404 until the post is republished or a redirect is set.
A tag is created but never assigned to any published post. The tag archive URL (/tag/<slug>/) exists in the database but is excluded from the sitemap (no published posts). The archive page renders an empty state.
Excerpt is blank and the post body is shorter than 55 words. The auto-generated excerpt uses the full post body (stripped of HTML). No truncation occurs.
noindex is set on a post after it has already been indexed by search engines. The sitemap entry is removed on next regeneration. The noindex meta tag is present on the page. Search engines that respect the directive will remove the page from their index on next crawl. SGEN does not actively submit deindex requests.
Related features
- Pages & Posts — blog posts are a post-type in the SG-Core record model; this reference sits alongside the Pages & Posts reference.
- Custom Objects — if the blog taxonomy model does not fit your content shape, Custom Objects lets you build a parallel record type with its own taxonomy.
- SG-Admin Blog — the operator how-to surface for writing, scheduling, categorizing, and managing blog content.
- SG-Admin Categories — the category management surface.
- Redirects — use Redirects when category or tag slugs change, to preserve inbound link equity.
- Media Library — the source for all featured images attached to posts.
