---
title: v4.0.20 Changelog
description: See what's new in Kener v4.0.20, including new features, improvements, and bug fixes
---

## New features {#new-features}

### Sitemap configuration {#sitemap-configuration}

Admins can now configure how `sitemap.xml` is generated from **Manage → Site Configurations → Sitemap**. Three modes are available:

| Mode       | Behaviour                                                                                                  |
| :--------- | :--------------------------------------------------------------------------------------------------------- |
| **Auto**   | Automatically includes all pages, visible active monitors, and current/previous month event pages           |
| **Manual** | Only the URLs you explicitly add are included                                                               |
| **Off**    | Returns a 404 for `/sitemap.xml`                                                                           |

In **Auto** mode you can also add extra manual URLs alongside the auto-generated ones. The sitemap URL is shown in the admin UI for easy copying.

### HEIC/HEIF image support {#heic-heif-support}

All image upload fields — logo, favicon, social preview, page logo, monitor image — now accept **HEIC** and **HEIF** formats (common on iPhones). Uploaded HEIC/HEIF images are automatically converted to JPEG server-side using `heic-convert` before processing with sharp.

The default `BODY_SIZE_LIMIT` has been increased to **3 MB** (from the SvelteKit default of 512 KB) to accommodate larger image uploads. You can override this via the `BODY_SIZE_LIMIT` environment variable.

## Improvements {#improvements}

### Open Graph & Twitter Card meta tags {#og-twitter-meta}

All public-facing pages now emit complete Open Graph and Twitter Card meta tags:

- **Status pages** (`/`, `/[page_path]`) — `og:title`, `og:description`, `og:type`, `og:image`, `twitter:card`, `twitter:image`
- **Incident pages** — article-type OG tags with the first comment as description
- **Maintenance pages** — article-type OG tags with the maintenance description
- **Event pages** — OG tags with month-specific title and description
- **Monitor pages** — OG tags with monitor name and status

### Improved SEO semantics {#seo-semantics}

- Page headers and incident/maintenance titles are now wrapped in proper `<h1>`/`<h2>` HTML heading tags for better SEO structure.
- `robots` meta tag (`noindex, nofollow`) added to admin, account, and embed layouts to prevent search engines from indexing private pages.
- `robots.txt` expanded with explicit `Allow`/`Disallow` rules and entries for AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, etc.).

### Page-level SEO field key fix {#page-seo-key-fix}

Page-level SEO settings now use the correct keys (`metaPageTitle`, `metaPageDescription`, `socialPagePreviewImage`) consistently. Previously, the dashboard controller read `metaTitle`/`metaDescription`/`socialPreviewImage` which didn't match what the page settings form saved. Pages with zero monitors also now correctly return SEO metadata.

### Separate save buttons for page settings {#separate-save-buttons}

The page settings UI now has separate **Save** buttons and loading states for Display settings and SEO settings, so saving one section doesn't affect the other.

## Bug fixes {#bug-fixes}

- Fixed image upload error handling on pages — non-OK responses are now caught before attempting to parse JSON.
- Removed unused `MonitorAlerting.svelte` component and stale `llms.txt`/`sitemap.xml` server handlers.
