Page vs Post vs Custom Object — how to choose
In short. SGEN has three content types. Page = one standalone document at a flat URL (/about). Blog Post = time-stamped item on a dated feed (/blog/category/slug). Custom Object = one entry in a repeatable structured collection (/products/canvas-tote-bag). Pick Page for evergreen one-offs, Post for anything with a publish date that belongs in a stream, Custom Object for any collection where every entry has the same shape. If you only have one entry now but expect more, use the type that scales — retrofitting five Pages into a Custom Object later means rebuilding each entry by hand.
/about · no date, no archive/blog/… · auto-archive, categories/products/… · shared template, structured fieldsOn this page: Content type overview · Good use cases · What not to do · Steps · Side-by-side comparison
How to decide between a Page, a Post, and a Custom Object
Picking the wrong content type creates real extra work — a product catalogue built in Blog will fight you at every step; ten product profiles built in Pages cannot share a template or auto-archive. This guide answers the question you face before clicking Add New anywhere in SGEN: which content type fits this piece of content?
What is this for?
These three content types live side by side in every SGEN site.
Pages hold evergreen, standalone content visitors navigate to directly — About, Contact, Services, legal pages. A Page sits at a flat URL you control (/about, /contact) with no archive of its own. Pages are never grouped by date or category.
Blog Posts are time-stamped content on a chronological timeline — news, announcements, tutorials, product updates. Every post lands automatically on the blog archive at /blog/, is grouped into categories, and can collect comments. Posts are built for volume — older ones age gracefully into the archive.
Custom Object types are structured, repeatable collections. Define a type once — slug, templates, permalink structure — then add as many entries as you like. Each entry gets its own public URL under the type's prefix (/products/canvas-tote-bag). Every entry shares the same fields, URL pattern, and SG-Builder template.
The decision tree:
- Timeless and standalone — one document at one URL? → Page.
- Time-stamped and feed-based — dated story in a growing stream? → Blog Post.
- One entry in a structured collection — every entry same fields, same shape? → Custom Object.
The mock below shows the SGEN admin sidebar for a site using all three:
Good use cases
Example 1: "About your business" → Page.
An About page is evergreen — single document, single URL, no series, no publish date. An editor clicks Pages → Add New, picks Start from scratch, titles it "About your business," and sets Status = Publish. The page lives at yourdomain.com/about. It never appears in any archive or feed. Nav position is set manually under Appearance → Menu after publishing — pages do not insert themselves into the nav automatically.
Example 2: "Apr 2026 your premium product" → Blog Post.
A seasonal product announcement has a publish date, belongs in a chronological stream, and fits the "New Arrivals" category. An editor clicks Blog → Add New, titles it "Apr 2026 your premium product," assigns it to "New Arrivals," adds tags "Featured" and "Limited," and sets Status = Publish. The post lands at yourdomain.com/blog/new-arrivals/apr-2026-canvas-tote-bag and appears automatically on the blog archive (/blog/) and category archive.
A key difference from Pages: at least one blog category and one tag must exist before you can save a post. If the blog has never been used, go to Blog → Categories and Blog → Tags to create them before starting the first post. (Source: blog/01-create-and-manage-blog-posts.md.)
Example 3: Product profiles → Custom Object.
Ten distinct products, each with the same structured data — category, price, material, availability, key features. Not time-stamped (not Blog), not standalone one-offs (not Pages). Create a "Products" type with slug products, attach a "Product Metadata" Custom Field group, and add entries. Each gets a URL like /products/canvas-tote-bag/ and appears on the /products/ archive. Adding an eleventh product next season means clicking Add New — no template changes needed.
The /products/ archive renders each product as a card. The "Product Metadata" Custom Field group surfaces category, price, material, and availability inputs on every entry's edit screen — the content team fills each entry without touching templates.
What NOT to use this for
- Do not build a product catalogue in Blog. Blog posts are sorted by publish date. Products do not have a meaningful chronological order, and the blog archive sorts newest-first — not by name, price, or availability. Use SGEN Ecommerce for purchasable products, or a Custom Object for a non-purchasable structured catalogue.
- Do not build a team-member directory in Pages. If you have six team members and each needs their own detail page with the same fields — role, bio, photo, years of experience — that is a Custom Object, not six manually-managed Pages. Pages do not share a template across entries, have no auto-archive, and do not let you attach field groups to a repeatable content shape at scale. When your seventh team member joins, a Custom Object adds one entry; a Pages-based approach requires duplicating and reformatting a Page from scratch.
- Do not use Custom Objects for single one-off documents. If you need one "Careers" page that lists your open roles in plain text, that is a Page — not a Custom Object type with one entry. Custom Objects earn their overhead only when you have multiple entries of the same shape. A single-entry type adds admin complexity for no reader-facing benefit.
- Do not put event content in Blog if you need structured event fields. Blog posts have a title, body, category, and publish date — no start time, location, RSVP link, or price field. If your events need those structured inputs, use a Custom Object type and attach a Custom Field group with the fields your event content needs. (General guidance — check your SGEN plan for a dedicated Events type if available.)
- Do not expect Blog Posts to appear in the Pages list or vice versa. They are managed from entirely separate admin panels: Pages → All Pages and Blog → All Posts. Content in one list never shows up in the other.
- Do not rely on a draft content type's public URL for sharing work-in-progress. Draft Pages return a hard not-found to any visitor who tries the URL — including you. Use the Preview link from the admin row instead. This applies to all three content types: always use the admin preview link to share draft content, not the live domain URL. (See the caution note in the Steps section.)
How this connects to other features
- Custom Fields — Custom Fields attach structured author-side inputs to any content type. Pages, Blog, and Custom Objects can all have Custom Field groups assigned to them via the Locations checkboxes in the field group editor. Use Custom Fields when you need consistent structured data on multiple entries of the same type — especially on Custom Objects, where every entry shares the same shape. After a group is published and its Locations are set, authors see the extra fields on every matching edit screen and fill them in per entry. Values render on public pages via the
[custom_field name=".."]shortcode. See Create a custom field group.
- Templates (SG-Builder) — Custom Objects require SG-Builder templates for their Single and Archive rendering surfaces. The type's edit form has three template dropdowns: Single (the individual entry page), Archive (the type's listing page), and Loop-Item (for embedding entries as cards on another page). Pages can optionally use SG-Builder when you pick Template = SG-Builder on the edit form. Blog posts do not require per-type SG-Builder templates — they use the site's global blog single and archive templates set in Blog Settings.
- Redirects — Renaming a Page slug, changing a Blog permalink structure, or changing a Custom Object type's slug all break existing public URLs. Set up 301 redirects in the Redirects area any time you change a URL that has already been published. For Custom Objects specifically: changing the type slug after entries are live breaks every entry URL, not just the archive. Plan slugs carefully before going live. See Manage site redirects (general guidance).
- SEO — Pages have per-page SEO settings on their individual edit forms. Blog posts have per-post SEO fields on their edit forms. Custom Objects have per-type SEO defaults (set on the type's create/edit form) and per-entry overrides on each entry's edit screen. All three content types are included in your site's auto-generated sitemap when their status is Published.
- Menu (Appearance → Menu) — None of the three content types add themselves to your site's navigation automatically. After publishing, open Appearance → Menu and add the Pages, blog archive URL, or custom object archive URLs you want to surface in the nav. The menu is managed separately from the content itself.
Before you start
- You are signed in to SGEN as an admin with access to Pages, Blog, and Custom Objects.
- You have a piece of content in mind and know roughly what it is: a standalone document, a time-stamped story, or one entry in a structured collection.
- If you are building a Custom Object type, you have decided on a slug (the URL prefix for all entries of this type). The slug is permanent once entries are published — treat it like a domain name.
- If you are using Custom Objects and need structured fields, you have sketched the field names and types before opening the entry edit screen for the first time. Field name slugs become permanent identifiers once author data exists under them.
- If you are publishing a blog post, at least one category and at least one tag must already exist. Create them under Blog → Categories and Blog → Tags if this is a new blog.
- If you plan to build SG-Builder templates for a Custom Object type, build the templates first and then create the type. If the templates are not ready, create the type as Draft and assign templates later.
Where to go
| Content type | Admin path | Primary action |
|---|---|---|
| Page | Pages → All Pages (/sg-admin/pages/) | Top-right Add New |
| Blog Post | Blog → All Posts (/sg-admin/blog/) | Top-right Add New |
| Custom Object type | Custom Objects (/sg-admin/custom-objects/) | Top-right + Create Type |
| Custom Object entry | [Your Type] → All [Type] (sidebar) | Top-right Add New |
Steps
1. Identify the content shape
Use the decision tree from the overview above: standalone timeless document → Page; time-stamped feed item → Blog Post; repeatable structured collection → Custom Object.
Tie-breaker: if you have one entry today but expect more, use the type that scales. A Custom Object handles ten team profiles with no extra configuration; retrofitting ten Pages into a Custom Object later means recreating each entry manually.
2. Review the URL and archive requirements
Before creating, confirm that the URL behavior of the content type matches what you need:
| Page | Blog Post | Custom Object | |
|---|---|---|---|
| URL pattern | /your-slug — flat (you set the slug; no base path) | /blog/category/post-slug | /type-slug/entry-slug — you set both the type-slug (per type, in type settings) and the entry-slug (per record) |
| Auto-archive | None | /blog/ and category archives | /type-slug/ archive |
| Chronological sort | Not applicable | Yes — newest first | No — admin-controlled |
| Category grouping | None | Yes (built-in blog categories) | No — use Custom Fields |
| Custom field support | Available via Custom Field groups — supplementary use | Tags + category built-in; Custom Field groups available for extra metadata | First-class — Custom Object IS the field schema (primary use) |
| Sitemap inclusion | Yes (when Published) | Yes (when Published) — also in /feed.xml | Yes (when Published) — if the type is public + indexed |
| Homepage-capable | Yes — Set as Homepage on any Published Page | No | No |
| Template | Text Editor or SG-Builder (optional) | Site blog template | SG-Builder per type — REQUIRED (no fallback text editor) |
Draft preview caution. Draft Pages return a hard not-found response to any visitor — including logged-in admins — who navigates to the public URL while the page is in Draft status. The admin Preview link (visible on the Pages list row for a Draft page) generates a private preview that only works when you are logged in to the admin. Always use the admin Preview link to share or review draft content. Do not share the raw /yourdomain.com/draft-slug URL with anyone for review purposes, regardless of content type. The same caution applies to Draft Custom Object entries. Blog Post drafts behave slightly differently on the public side — use the admin Preview link for those too.3. Open the correct admin panel and create the content
For a Page:
- Go to Pages → All Pages.
- Click Add New (top-right). A modal appears asking how to start.
- Pick Start from scratch for a text page, or Use a template to clone an SG-Builder layout.
- Fill in: Title (required), edit the Permalink slug if needed, add Content, pick a Status, and choose a Template (Text Editor for simple content, SG-Builder for a rich visual layout).
- Optionally tick Is landing page to strip the site header and footer — use this for campaign-only pages, not for nav-linked pages like About.
- Click Create a Page. You land on the Edit screen. The page is immediately live if Status = Publish.
Full walkthrough: Create and manage pages.
For a Blog Post:
- Go to Blog → All Posts.
- Click Add New (top-right).
- Fill in: Title (required), edit the Permalink slug, add Content and optionally an Excerpt (shown on archive cards).
- In the right column, assign at least one Category and at least one Tag — both are required to save.
- Set Status and optionally a Thumbnail (cover image from the Media Library).
- Click Create a Post. The post appears on the blog archive and category archive immediately if Published.
Full walkthrough: Create and manage blog posts.
For a Custom Object type (first time only):
- Go to Custom Objects in the admin sidebar.
- Click + Create Type (top-right).
- Fill in: Title (the type name, e.g. "Products"), the Slug auto-fills from the title (edit it directly if needed — this is the URL prefix for every entry).
- Set Items per page (for the archive) and Items per row (for grid layouts).
- Assign SG-Builder templates for Single, Archive, and Loop-Item. If templates are not ready, leave them blank and save as Draft.
- Choose a Permalink structure — "Post name" (
/products/entry-slug/) is recommended for most types. - Set Status: Publish if the templates are ready, Draft if you need to pre-load entries first.
- Click Create Item. The type appears in the admin sidebar immediately.
Full walkthrough: Create and manage custom object types.
For a Custom Object entry (type already exists):
- Open the type's panel in the sidebar (e.g. Products → Add New).
- Fill in the title and any Custom Field inputs attached to this type.
- Set Status = Publish when ready.
- Click Create Item. The entry appears on the type's public archive.
4. Attach Custom Fields when you need structured data
For any content type where you need consistent, structured author-side data — product category, price, material, author bio, feature list, event date — attach a Custom Field group.
- Go to Custom Fields in the admin sidebar.
- Click Add New. Name the group.
- Add each field: give it a Label (shown to authors), an internal name (used in the shortcode), and a Type (Text, Number, Select, Textarea, Image, etc.).
- Under Locations, tick the content type where this group should appear: Page, Blog, and/or any Custom Object you have registered.
- Set Status = Publish and click Create Item.
The new fields appear on every matching edit screen immediately. Authors fill them in per entry. Values render on public pages via the [custom_field name=".."] shortcode. Place shortcodes in the post body, an SG-Builder HTML component, or your SG-Builder template:
`` [custom_field name="product_category"] [custom_field name="price"] [custom_field name="material"] [custom_field name="availability"] ``
The shortcode key is the internal name (the slug you set, e.g. product_category) — not the field Label. [custom_field name="Product Category"] does not work.
Full walkthrough: Create a custom field group.
5. Set status and verify each content type's publish behavior
All three content types share the same two-state model: Draft (visible in admin only — public URL returns not-found) and Publish (live and publicly reachable). Pages and Blog Posts also support Private (visible only to logged-in admins on the public side) and Password Protected (public visitors see a password gate).
For Custom Object types specifically: the type's Status controls whether its public archive and all entry URLs are reachable. A Draft type still appears in the admin sidebar so your team can pre-load entries while SG-Builder templates are being built — none of those entries appear to visitors until the type is set to Publish.
The status badges below reflect a site mid-build: Pages and Blog are live; the Products custom object type is still in Draft while the detail template is being finished. Team Members is published and fully live:
What success looks like
- The piece of content you created is reachable at the correct public URL when its status is Published. Navigating to the URL in a private or incognito window loads the content.
- For Pages: the URL is flat (
/about) and the page does not appear on any blog archive or feed. After publishing, it appears in the Pages admin list with a Published badge. - For Blog Posts: the post appears on the blog archive (
/blog/) and on the assigned category archive, sorted newest-first. The Published badge is visible on the Blog admin list row. - For Custom Objects: the entry appears on the type's archive page (
/products/), the entry's detail page loads at/products/entry-slug/, and any Custom Fields attached to the type are visible and fillable on the entry's edit screen. - Custom Fields render their author-entered values on the public page wherever the
[custom_field name=".."]shortcode is placed. - After saving any of the three content types, a green save banner confirms the write was committed. If no banner appears, the save did not register — reload the edit form and try again.
What to do if it does not work
I published a Page but the public URL returns not-found. Open the Edit screen for the page and confirm the Status dropdown shows Publish (not Draft, Private, or Password Protected). If Status is Publish and the URL still returns not-found, try a private or incognito browser window to rule out a browser cache. Adding ?cb=1 to the end of the URL can also bypass some cache layers.
I want to share a draft Page with a client for review but the URL doesn't work. Draft Pages return a hard not-found response on the public URL — that is the intended behavior. To share draft content for review, use the Preview link that appears on the Pages admin list row when a page is in Draft status. The preview is only accessible to users who are logged in to the admin.
My draft Blog Post is returning content instead of a not-found on the public URL. Blog Posts in Draft status currently behave differently from Draft Pages on the public side. Use the Preview link from the Blog admin list to review and share draft posts — do not share or rely on the live domain URL for draft blog content.
My Custom Object archive returns not-found. Confirm the type Status is Publish (not Draft). Also confirm that at least one entry under the type has Status Publish — the archive only lists published entries. A type with no published entries may render an empty page or return not-found depending on the Archive template.
My Custom Fields are not appearing on the edit screen. Open the Custom Field group in Custom Fields and confirm: (1) the correct content type is ticked under Locations — Page, Blog, or the specific Custom Object type by name — and (2) the field group Status is Publish. Draft field groups are hidden from all edit screens.
I chose the wrong content type and want to move content. There is no automatic migration between content types in SGEN. To move content: copy the text from the existing entry, create a new entry of the correct type, paste and fill in the content, set Status = Publish on the new entry, then trash the original. If the original URL has inbound links from other pages or email campaigns, add a Redirect from the old URL to the new one in the Redirects area.
My Custom Object type's slug conflicts with an existing Page slug. SGEN's slug collision check covers Custom Object types against each other, but does not check against the Pages or Blog slug namespace. If you create a Custom Object type with slug about and a Page already exists at /about, routing may behave unpredictably. Use distinct slugs that do not overlap with any existing Page or Blog URL on your site.
The Custom Object sidebar panel appeared but disappeared after a reload. The admin sidebar is cached in the browser session. Hard-reload the admin (Ctrl+Shift+R or Cmd+Shift+R) to pick up newly registered or trashed Custom Object types.
Side-by-side comparison
| Page | Blog Post | Custom Object | |
|---|---|---|---|
| URL pattern | /your-slug (flat) | /blog/category/post-slug | /type-slug/entry-slug |
| Archive | None | /blog/ auto-archive + category archives | / auto-archive + loop-item embed for inline lists on other pages |
| Chronological sort | No | Yes — newest first | No |
| Custom field support | Available via Custom Field groups — supplementary use | Tags + category built-in; Custom Field groups available for extra metadata | First-class — Custom Object IS the field schema (primary use) |
| Sitemap inclusion | Yes (Published) | Yes (Published) — also in /feed.xml | Yes (Published) — if the type is public + indexed |
| Draft public URL | Hard not-found | Returns the blog index page or 404 (varies by setup) — always use admin Preview link for Drafts | Hard not-found |
| Admin preview link | Yes — accessible to any admin | Yes — required when viewing a Draft, because the public URL returns soft response | Yes — required for Drafts |
| Homepage-capable | Yes | No | No |
| Template options | Text Editor or SG-Builder | Site blog template | SG-Builder per type |
| Category / taxonomy | No | Yes (built-in) | No built-in taxonomy UI — create a Select or Relationship Custom Field to group records |
| Designed for | One-off evergreen documents | Time-stamped stories on a feed | Repeatable structured collections |
| Appears in nav automatically | No — add via Appearance → Menu | No — add /blog to Menu (individual posts don't appear) | No — add / |
| Included in RSS feed | No | Yes — auto-included in /feed.xml | No |
| Best for | About, Contact, Campaign landing pages | News, Updates, Tutorials | Team bios, Property listings, Event entries |
Citations: pages/01-create-and-manage-pages.md · blog/01-create-and-manage-blog-posts.md · custom-objects/01-create-custom-object-types.md · custom-fields/01-create-a-custom-field-group.md.
