Skip to content
Type something to search...
Kivo Theme Documentation

Pages

Skill level: Beginner to edit, light code to add a page made of sections

Every Page And Its File

The route file decides which sections a page shows. The content file holds the page’s title, SEO fields, page header, and named blocks. Paths below are for English; French uses the same files in french/, served under /fr/.

PageURLRoute (src/pages/[...lang]/)Content (src/content/)
Homepage/index.astrohomepage/english/-index.md
Demo homepages/home-api/, /home-ai/, /home-analytics/home-*.astrohomepage/english/home-*.md
Pricing/pricing/pricing.astropricing/english/-index.md
Features overview/services/services/index.astroservices/english/-index.md
Feature page/services/<entry>/services/[single].astroservices/english/<entry>.mdx
Solutions/solutions/, /solutions/<entry>/solutions/solutions/english/
Integrations/integrations/, /integrations/<entry>/integrations/integrations/english/
Customers/customers/, /customers/<entry>/customers/customers/english/
Compare/compare/, /compare/<entry>/compare/compare/english/
Changelog/changelog/, entries, /changelog/tag/<tag>/, /changelog/rss.xmlchangelog/changelog/english/
Blog/blog/, posts, /blog/category/<name>/, /blog/tag/<name>/, /blog/rss.xmlblog/blog/english/, authors in author/english/
Docs landing/docs/docs.astrodocs/english/-index.md
FAQ/faq/faq.astrofaq/english/-index.md
About/about/about.astroabout-us/english/-index.md
Team/team/, /team/<member>/team/team/english/
Careers/careers/, /careers/<role>/careers/careers/english/
Testimonials/testimonials/testimonials.astrotestimonials/english/-index.md
Community/community/community.astrocommunity/english/-index.md
Security/security/security.astrosecurity/english/-index.md
System status/status/status.astrostatus/english/-index.md
Contact sales/contact/contact.astrocontact/english/-index.md
Log in, sign up, reset/login/, /signup/, /forgot-password/login.astro, signup.astro, forgot-password.astroauth/english/login.md, signup.md, forgot-password.md
Legal and text pages/privacy-policy/, /terms-conditions/, /cookie-policy/[page].astropages/english/*.md
Shortcode demo/components/[page].astropages/english/components.mdx
Layout gallery/elements/elements.astropages/english/elements.md
404any missing URL404.astrosections/english/not-found-section.md

Each collection (blog, changelog, features, and the others) is explained in Collections.

Inner pages start with a page header: breadcrumb, title, description, and optional buttons. It is set by the pageHeader block in the page’s content file. The title comes from the page’s title.

src/content/services/english/-index.md
title: "Platform"
pageHeader:
breadcrumb: true
eyebrow: "Platform"
description: "Runtimes, databases, networking, and deploys in one place."
primaryButton:
enable: true
label: "Start for free"
url: "/signup/"
secondaryButton:
enable: true
label: "Read the docs"
url: "/docs/"
options:
layout: "split" # default | intro | centered | split

badges adds proof badges, buttons adds more buttons, and in the split layout visual or image fills the right side. src/content/services/english/-index.md shows every field.

Fields Every Page Accepts

These frontmatter fields work on page and entry files. src/content/_file_format.md explains most of them; the full list is the page schema in src/content.config.ts.

FieldWhat it does
title, descriptionThe page title and summary
metaTitle, metaDescriptionReplace the title and description in search results only
imageSocial preview image for this page
drafttrue hides the page from the built site (it still shows in npm run dev)
customSlugA different URL segment than the file name. Use the same value in every language
canonical, robots, keywordsSEO overrides
excludeFromSitemap, excludeFromSearch, excludeFromAiLeave the page out of the sitemap, site search, or the AI files
disableTaglineDon’t add the site tagline to this page’s title
headerLayout, footerLayoutAnother header or footer layout on this page

Add A Page

For policies, guides, or any page of text. Kivo renders every file in src/content/pages/ as a page, with a sticky table of contents when the page has several headings.

  1. Copy src/content/pages/english/terms-conditions.md to a new file, for example src/content/pages/english/acceptable-use.md. The file name becomes the URL: /acceptable-use/.

  2. Change title, description, and the Markdown body. Remove contentPage.notice, or change it to your own callout. numbered: true numbers the headings.

  3. Create the French version in src/content/pages/french/ with the same file name.

  4. Add a link to it in src/config/menu.en.json and menu.fr.json.

Remove A Page

  1. Delete its route file in src/pages/[...lang]/ and its content (file or folder) in src/content/, in every language.
  2. Remove its links from src/config/menu.en.json, menu.fr.json, and any content file that links to it (search the project for the URL).
  3. Run npm run astro-check, then npm run build, to make sure nothing still points to it.

To hide a page without deleting it, set draft: true in its content file.