Built with Chinaski

Set Up a Blog

Chinaski ships as a blog first: posts, categories, the paginated index, and a feed are all standard parts. This guide sets up a working blog: the URL structure, writing and organizing posts, categories, the index page’s title and pagination, the feed, and per-language variants.

Step 1: Choose the blog’s URL home

In Settings, pick the post URL prefix: the path your posts live under. The default is blog, giving URLs like /en/blog/my-post/.

  • You can set a different prefix per language, useful if “blog” translates (journal/ in one language, blog/ in another).
  • An empty prefix puts posts at the language root (/en/my-post/) if the index should be the home.
  • Changed prefixes are safe: every published post gets an automatic redirect from its old address at the next build, so renaming later never breaks links.
  • The site’s home page defaults to pointing at the blog (a root redirect is generated when no root page exists), or choose any page as the home target in settings.

Step 2: Choose the index’s title

The blog index page has a title you can set without touching templates, with this fallback chain:

  1. A per-language blog index title (settings).
  2. A site-wide blog index title.
  3. The capitalized URL prefix (“blog” → “Blog”).
  4. The literal word “Blog.”

Write it as any of the per-language settings; the builder picks the right one per language.

Step 2b: Write posts

Use the post editor exactly like pages (same body editor), plus post-specific fields:

  • Excerpt: shown in listings and social sharing; optional (an automatic one is derived from the opening text for search purposes if you leave it empty).
  • Category: one per post (see below).
  • Tags: comma-separated, displayed by your theme.
  • Author: picks from the managed author list (many authors per post is supported).
  • Sticky: pins the post to the top of the index.
  • Featured image: with alt text and focal point.
  • Scheduling: publish/unpublish at future or past times.
  • SEO fields and sitemap settings per post.

Import existing content as drafts via markdown files with front matter (title, slug, category, language).

Two special patterns:

  • Keep a template post. Mark a post as a template (“use as template”) to reuse it as the starting point for recurring formats (e.g., a weekly digest); templates are kept out of the public listing.
  • Password-protect a post for members-only pieces (the gate rules from Protected Pages apply).

Step 3: Categories

  • Categories are managed in their own admin section, per language, each has a name, slug, and description.
  • You don’t have to predefine categories: saving a post with a category value adds it to the managed list automatically.
  • Each category gets its own listing page (with pagination and its own share/canonical URLs), reachable from posts by theme; category listing templates are the same blog-index template, filtered.

Step 4: The index and its pages

The posts list is paginated automatically based on the posts per page setting (default 10). Page 2 and beyond live at .../page/2/ with proper canonical URLs, so search engines don’t blur pages together. The index template receives everything it needs (post list with dates/links, pagination, category name when filtered); themes just render.

Step 4b: The RSS feed

Every language’s blog gets its own feed at /…/feed.xml, served at the blog prefix, with the feed address available to themes as a variable. One nuance: the feed file is only generated when at least one post is published; a brand-new blog with zero posts has no feed file yet (its index may show a feed link that leads nowhere until the first post is live).

“Related” links between posts are authored, not automatic: connect posts to each other as related in the editor (or via the API), and the built-in related-posts block renders those connections per post. Tag-based or similarity-based relatedness is not a thing here; the relationships are deliberate.

Step 6: Discovery (built in)

At build time the search engine-facing outputs update automatically:

  • Sitemap includes the blog index and every published post (with the priority defaults documented on the sitemap page; password-protected posts excluded).
  • Category pages have their own canonical URLs so search engines treat each category/page combination correctly.
  • Like everything else, posts are per-language records: translations get their own feed entry, hreflang links, and sitemap entry via the translation-key workflow.

The short version

Write posts in the default language, organize with categories (they build your category pages), set the index title once, and the paginated index, category pages, and RSS feed come from the same build that publishes pages. A rename of the prefix keeps old links alive, and translations plug into the same structures.

Read this site in