diff --git a/README.md b/README.md
index f02b0de..d68f8c3 100644
--- a/README.md
+++ b/README.md
@@ -271,9 +271,12 @@ The resolved locale also drives date formatting (`Intl.DateTimeFormat`), search
tag-label sorting (`localeCompare`), via `getLocale()` in the same module — so a translation
file doesn't just relabel text, it affects how dates and sorting behave too.
-Site-specific branding that lives in the embedding page itself (the page `
`, the header
-search placeholder, the sidebar section headings) is plain static HTML, not JS-templated —
-translate it by editing that page directly (`demo/index.html` for this repo's own demo).
+The page `` and an optional `#site-title` header link (see "Embedding in an existing
+page" below) are both set from the `siteName` string at startup, so they stay in sync with the
+resolved locale automatically — translate `siteName` in `strings/xx.json` rather than editing
+the page. Other site-specific branding in the embedding page itself (the header search
+placeholder, the sidebar section headings) is plain static HTML, not JS-templated — translate
+that by editing the page directly (`demo/index.html` for this repo's own demo).
## Embedding in an existing page
@@ -350,6 +353,11 @@ demo does.
```html
```
+- **Site title link — `#site-title`.** Optional; its text is set to the `siteName` string once at
+ startup, so it stays in sync with the resolved locale without editing the page per language.
+ ```html
+ My Site
+ ```
`#tag-filters` is optional — omit it and nothing breaks, the article list and search still work
standalone.
diff --git a/js/router.js b/js/router.js
index bcdf633..e9fa7e1 100644
--- a/js/router.js
+++ b/js/router.js
@@ -78,6 +78,13 @@ function init() {
if (!document.getElementById('list-view') || !document.getElementById('article-view')) {
throw new Error('Missing required #list-view and/or #article-view element — see the "Embedding in an existing page" section of the README.');
}
+ // Optional embedding-page markup (see "Embedding in an existing
+ // page" in the README) — set once here rather than in
+ // showListView()/loadArticle() so a page that loads straight into
+ // an article route (a direct link) still gets it, not just one that
+ // starts on the list view.
+ const siteTitle = document.getElementById('site-title');
+ if (siteTitle) siteTitle.textContent = t('siteName');
});
// Show a top-level error if dependencies fail to load (or a mount point