TH SeedWebs

Pages and posts

Creating, editing and publishing Pages and Posts — Draft/Published/Trash, slugs, content modes, categories, and the URLs you actually get.

Last updated 2026-08-11

Two content types are available on every plan from day one: Pages and Posts. This guide covers creating them, editing them, publishing them, and what happens to your public URLs when you press save.

How Pages and Posts differ

PagesPosts
Admin menuPages/admin/pagesPosts/admin/posts
Public URL/{slug}, for example /about-us/posts/{slug}, or whatever you set under Settings → General → Post URLs
Parent/child structureYes (Parent Page + Page Order)No
Categories / tagsNoYes (Categories + Tags)
AuthorNo fieldOne is required, and co-authors are allowed
TemplateChoose one per pageNo choice; every post uses the theme’s post template
Second content modeHTML BuilderMarkdown (must be enabled first)

Both types are on every plan (Seed, Pro, Business and the trial) and need no special flag.

Note: switching Pages or Posts off under Settings → General, Admin Menu (/admin/settings/general) removes the menu from the admin panel and makes that type’s public pages 404. Only switch it off if you really mean to hide the whole thing.

Creating something new

  1. Go to Pages → Add Page (/admin/pages/new) or Posts → Add Post (/admin/posts/new).
  2. Type a title in the top field. A slug is generated from it (see the note on Thai titles below).
  3. Write the content in the editor on the left.
  4. For a post, pick an Author in the Publish box first — saving fails without a primary author.
  5. Choose Draft or Published and press save. New forms start on Published, so if it is not ready for the public you have to switch it to Draft yourself.

The save button’s label follows the status: Publish (new + Published), Save Draft (new + Draft) and Update (editing an existing item). After a successful save it shows “Saved ✓” and ignores clicks for about 3 seconds, so a double-press cannot stack two requests.

Leaving the page with unsaved changes asks for confirmation first.

The Publish box

The thick-bordered box at the top right is the Publish box, separate from the accordion card below it. It holds:

  • Draft / Published status, via the pair of buttons on the left
  • A trash icon that moves the item to Trash (only on items already saved)
  • The Slug, and a language badge (the badge appears once the site has more than one language)
  • The Category and Author fields (posts only)
  • The save button

Three statuses

StatusMeaning
draftNot published. The public URL does not resolve
publishedLive on the public site
trashIn the bin, still recoverable

The status buttons in the form offer Draft and Published only. There are two routes to Trash: the trash icon in the Publish box (one item at a time), or ticking several rows in the list and using the bulk action (super_admin and admin only). There is no per-row trash button in the table.

There is no publish scheduling in SeedWebs. The three statuses above are all there is. Setting a future date in the “Created” field does not publish the page when that date arrives — Published is visible immediately, Draft is never visible.

Slug rules

The slug is the tail of the URL. On a new item it is generated from the title; when editing, click the slug to type over it.

  • A slug keeps only a-z, 0-9 and -. Everything else is stripped, capitals become lowercase, and spaces and underscores become -.
  • Slugs are English only. A slug typed in Thai (or any other non-English script) is refused when you save, with a message asking for an English one. Slugs already saved in Thai keep working exactly as before — nothing is rewritten behind your back.
  • A title written entirely in Thai leaves nothing behind, so SeedWebs substitutes a random 10-character code — you get a URL like /k3d9f0a1b2. For a readable URL, type an English slug yourself every time.
  • A mixed Thai-English title keeps only the English: “บทความ Hello World” becomes hello-world.
  • Slugs must be unique within one language. A collision is resolved by appending a random code rather than refusing the save. Different languages may share a slug.
  • For Pages, that uniqueness is per parent, not sitewide. A child page’s slug only has to be unique among its own siblings — /face/laser and /body/laser can both end in laser because they sit under different parents. Two pages under the same parent (or two top-level pages) still can’t share a slug; the second one gets the random-code treatment same as above. Posts have no parent, so their uniqueness is sitewide as stated above.
  • Moving an item to Trash rewrites its slug to {slug}-trashed-{number}, freeing the original for immediate reuse.

The sidebar accordion

Below the Publish box is a single card of collapsible sections. Opening one closes the others.

Click the dashed frame to pick an image from Library, Upload or Unsplash. This is the image a theme shows in cards and listings, and it becomes og:image and twitter:image when the link is shared. The library is covered in Media library.

Options

For Pages:

FieldWhat it does
TemplateThe page’s template. The list comes from both Pages → Templates (/admin/pages/templates) and any theme template named page-*
Parent PageSets a parent, which makes the URL /{parent}/{this page}
Page OrderA sort number, used in the list and in Structure
Show galleryEnables this page’s gallery. A picker appears under the editor and an insert-gallery button in the toolbar. Put a {{gallery}} tag in the content and the images render there; leave it out entirely and the gallery is appended to the end of the content

The template named landing is a special case: it removes the theme’s header and footer entirely. Good for single-page promotions.

Worth knowing: with HTML Builder mode on, choosing a Template other than Default shows a yellow warning that the template will not be used, because HTML Builder renders your HTML directly.

For Posts, the Options section holds only the Show gallery switch.

Tags and Co-authors (posts only)

  • Tags — type a name and press Add or Enter. A tag with the same name or slug is reused rather than duplicated. Existing tags appear as + tag name buttons to click.
  • Co-authors — several, in the order you add them. The section is hidden from the writer role.

SEO

SEO Title (60 characters), SEO Description (160 characters) and Keywords, with a live SEO check panel scoring what you have entered. Left blank, the public site uses the title as the page title.

Custom Fields

Extra fields you have defined appear here (and some below the editor). Where they come from depends on the type:

  • Pages: from the template chosen under Pages → Templates
  • Posts: from the category chosen (/admin/posts/categories)

Change the template or the category and the fields change with it. Values already entered are not deleted.

Created / Updated dates

Under the accordion card are the created and last-updated dates. Click to set a different date and time — it affects sorting and the date a theme displays.

Content modes

Article (the default, both Pages and Posts)

A what-you-see editor: bold, italic, underline, H2/H3/H4, bulleted and numbered lists, left/centre/right alignment, image insert, gallery insert (when Show gallery is on), links, and a view-source button at the right of the toolbar.

HTML Builder (Pages only)

The HTML Builder switch sits next to the screen title. Turn it on and the content is cut into section cards along its top-level HTML structure. Each card has three tabs:

TabFor
ContentEditing the text and swapping images in that block, without touching code
StyleEditing each element’s Tailwind classes
HTMLEditing the HTML directly, with a format button

Cards can be dragged, duplicated and deleted. Add Block offers ready-made blocks (Hero, Features, Stats, Logos, Testimonials, Pricing, FAQ, Team, Blog, Contact, CTA), and Import HTML takes a whole page of HTML you paste in.

The split into cards happens when the HTML has two or more block-level children at the top level. Nested structures — a multi-column grid, say — stay as one card.

Markdown (Posts only, and off by default)

A Markdown switch appears next to the screen title once Enable Markdown on posts is turned on under Settings → General (/admin/settings/general, super_admin or admin). On save, SeedWebs converts the Markdown to HTML for the post body and keeps your Markdown source so you can carry on editing it.

A post that was saved in Markdown mode keeps its switch even if the setting is turned off later, so the post never becomes uneditable.

Switching modes clears the content

Switching with content already in place asks for confirmation, on a button labelled Switch & Clear. The old mode’s content is always discarded; nothing is converted between modes. Copy anything you want to keep out first.

What the saved mode does on the public site

SeedWebs records the mode last used on that item (internally, _content_mode), and the public site reads it to decide how to render.

  • A Page in HTML Builder mode is rendered as your HTML directly, not through the theme’s page template. SeedWebs still wraps it in <main>, unless your HTML has its own <main> or you are using the landing template.
  • A Page in Article mode goes through the theme’s templates, looking for page-{template name} and falling back to page.
  • Posts always render through post-detail-page, falling back to post-detail, whether written in Article or Markdown.

An old page with no recorded mode is guessed when you open the editor: content starting with <section>, <div> or <main> opens in HTML Builder mode.

Template tags inside the content body work on Pages only. A page’s content is passed through the tag renderer before display, so {{site_name}}, {{#each posts}}, {{slider}} and {{form}} all work mid-content. A post’s content is placed into its template as-is; the only tags that work there are {{gallery}}, {{social_share}} and {{locale_prefix}}. Anything else appears literally as {{...}} on the page. To use those tags with posts, put them in the theme’s template instead. The full list is in Template tags.

Post categories and tags

  • A post belongs to one category (the Category field is single-select) but can carry many tags.
  • With only one category on the site, the Category field is hidden and posts join it automatically. A new site starts with one called News.
  • Manage categories at Posts → Categories (/admin/posts/categories) and tags at Posts → Tags (/admin/posts/tags). Categories support parents and children.
  • The public pages are /category/{slug} and /tag/{slug}.

Parent pages and ordering

Set Parent Page under Options and the URL nests: a page team whose parent is about lives at /about/team. Several levels deep is fine.

Pages → Structure (/admin/pages/structure) lets you drag both the order and the parent nesting on one screen. Saving also syncs the order and parent onto the page’s translations in the same group.

The URLs you actually get

ContentURL
The page whose slug is home/ (opening /home 301-redirects to /)
An ordinary page/{slug}
A child page/{parent-slug}/{child-slug}
A post/posts/{slug} by default — see Post URLs in Settings → General
Any language other than the primary onePrefixed with the language code: /th/about-us, /th/posts/hello

Every new site comes with a Home page (slug home) containing the words “COMING SOON” — edit it in place. With no published home page, SeedWebs uses the first published page as the home page.

Pages come first. If a page’s slug matches the URL a visitor opens, that page is served before any other content type’s routes are considered. The exception is the paths below, which are reserved for other content types. Nothing stops you saving a page with one of these slugs, but such a page is never served:

search · posts · blog · news · events · products · tours · staffs · authors · books · docs · category · tag · product-categories · product-tags · product-brands · tour-category · book-categories · robots.txt · sitemap.xml · llms.txt

You can move your posts. Settings → General → Post URLs offers four shapes: /posts/my-article (the default), /blog/my-article, /news/my-article, or /my-article with no prefix at all. Whichever you pick, the other three keep working — they redirect to the one you chose, so nothing you have already published or shared breaks.

Two things to know before you switch:

  • With no prefix, a post and a page can want the same address. The page wins, and that post stays reachable at /posts/{slug}. SeedWebs tells you which posts this affects before you save, and refuses to let you give a new post a slug that is already taken by a page.
  • If you have redirect rules under Tools → Redirects that point at /posts/…, fix them first. SeedWebs blocks the change until you do, because a rule pointing one way while the site redirects the other way sends visitors round in a loop.

The list screens (All Pages / All Posts)

  • Status tabs — All, Published, Draft, Trash. The count in brackets shows on the selected tab only, and a tab with 0 items is hidden unless it is All or the tab you are on.
  • Search — matches title and content.
  • Language filter — at the right of the heading, once the site has more than one language.
  • Column picker — choose which columns you see. The Save as default button, which sets it for the whole site, is for super_admin and admin only.
  • Duplicate — makes a ... (Copy) as a Draft with a new slug. A post’s categories and tags come along, but the copy’s author becomes whoever pressed Duplicate, not the original author.
  • Multi-select — the toolbar at the top changes status, changes language, and moves items to Trash in one go. These bulk actions are for super_admin and admin.
  • The Pages list indents children under their parent.

Trash and restoring

In the Trash tab each row has a Restore button, which brings the item back as a Draft — it does not return to Published on its own. Empty Trash deletes everything in the bin permanently, with no recovery.

One thing to watch after restoring: the slug is still {slug}-trashed-{number}. Set it back yourself before republishing.

Saved, but the site is unchanged

The public site sits behind a cache. After saving something Published, visitors may see the old version for about another minute. Wait it out and reload. (Saving a page shows a message about this; saving a post just confirms the save, but the cache behaves the same way.)

Draft items never appear on the public site, and there is no preview link for a draft. To see the real thing before announcing it, publish the page without linking it from any menu and open the URL directly (see Menus).

Who can do what

Tasksuper_adminadmineditorwriter
See the listEverythingEverythingEverythingOwn items only
CreateYesYesYesYes (forced to Draft)
EditAnythingAnythingAnythingOwn drafts only
Publish / move to TrashYesYesYesNo
Bulk actionsYesYesNoNo

More about the writer role:

  • Sees and edits only what they created.
  • The Published status button is not rendered in a writer’s form at all, leaving Draft; a publish request arriving by any other route is quietly downgraded to Draft.
  • Once an editor or admin publishes a writer’s work, the writer can no longer edit it. The reply says an editor has to move it back to Draft first.
  • The byline is locked to the writer. They cannot choose someone else or add co-authors.

Roles and adding users are covered in Users and permissions.

AI helpers in the form (key required)

The AI button at the top right of the form, and the Translate button next to the title field, appear only once an API key is saved under Settings → General, AI Features (/admin/settings/general, super_admin and admin only). Translate needs two further conditions: the item is linked into a translation group, and you are editing a language other than the site’s primary one.