ioy.ai
Sign inGet the starter
Template guide

How does the sitemap update?

Publish pages and content once; the HTML directory and XML sitemap use the same page inventory.

Where is the sitemap?

The site directory lists public pages and published guides, Blog posts, features and scenarios. The XML sitemap contains the same canonical URLs for search engines. Both are generated from the running release; there is no manually maintained XML file. The footer links to the directory, and /robots.txt advertises the XML sitemap.

How do I add or update content?

Create Markdown or MDX in content/docs/en, content/blog/en, content/features/en or content/scenarios/en. Supply a stable id, kind, slug, locale, title, description, author, ISO publication and update dates, and status: published. Run npm run content:build and npm run sitemap:check.

The content build runs automatically before development, type checking and production builds. Publishing a new release therefore updates the directory and XML together. Editing updatedAt updates that URL's lastmod; use the actual date of a meaningful content update. Removing a file removes its URL after rebuilding. A draft is available only in the local preview and never enters the public sitemap.

How do I add a page implemented in code?

Simple informational pages belong in app/core/policies.ts under pages, with a path key, title, description and body. Despite the filename, this registry also includes About, Contact and Help. The shared public page inventory reads the registry directly, so adding a page creates its route and sitemap entry together.

For a page with a custom React view, register its route metadata in staticPublicPages() in app/core/public-pages.ts, then add its view to app/routes/site.tsx. Routing and sitemap generation both consume that declaration. Do not add a separate hardcoded sitemap URL list. For optional modules, use the same availability condition for the route and page declaration.

Which URLs are excluded?

Account, administration, login, search, API and template Git endpoints are excluded. indexable: false on content or a registered informational page sets noindex and excludes it from both sitemaps. Redirect source URLs are excluded; maintain old paths in product.redirects after changing a slug. Use APP_URL as the canonical production origin.

A non-default language appears only when it is enabled in product.locales and its content is actually published. Translated documents share a stable ID and contribute reciprocal hreflang links in XML. Unpublished translations do not create duplicate English pages.

What should I verify after publishing?

Open the public page, /sitemap, /sitemap.xml and /robots.txt. Confirm the new canonical URL and meaningful update date, and check that removed, draft, private and redirect URLs are absent. The build also runs automated sitemap checks. Submit the XML URL to your own Search Console property when needed; this template does not submit it automatically or guarantee indexing.

Google recommends automatic sitemap generation from a site's own data, canonical URLs and accurate modification dates. See Google's sitemap documentation and localized sitemap guidance.