diff --git a/index.html b/index.html
index d81e9a8..717146c 100644
--- a/index.html
+++ b/index.html
@@ -7,10 +7,10 @@
-
Devy Archive
-
+ Devy 블로그 — 백엔드·인프라·AI 개발 기록 | Devy Archive
+
-
+
@@ -22,7 +22,7 @@
-
+
diff --git a/scripts/prerender.mjs b/scripts/prerender.mjs
index 725d17d..1d79ce9 100644
--- a/scripts/prerender.mjs
+++ b/scripts/prerender.mjs
@@ -41,7 +41,7 @@ function outputPathFor(routePath) {
function withHead(templateHtml, route) {
const fullTitle = toFullTitle(route.title)
- const description = route.description || "Devy의 개발과 운영 기록을 문제 해결 중심으로 모아둔 아카이브입니다."
+ const description = route.description || "Devy의 기술 블로그입니다. 백엔드·클라우드 인프라·AI 개발과 운영에서 겪은 문제와 해결 과정을 기록합니다."
const previewTitle = route.ogTitle || fullTitle
const previewDescription = route.ogDescription || description
const canonicalPath = route.canonicalPath || route.path
diff --git a/scripts/seo.test.mjs b/scripts/seo.test.mjs
index 587e6c5..0e3bf45 100644
--- a/scripts/seo.test.mjs
+++ b/scripts/seo.test.mjs
@@ -71,12 +71,45 @@ test("all published articles include visible content and matching React-owned st
}
})
-test("home, collection, and project metadata is rendered by the active React page", () => {
+test("localized homes identify one website while preserving each blog's canonical URL", () => {
+ const homes = [...pages].filter(([url]) => /^\/(en\/)?$/.test(new URL(url).pathname))
+ assert.equal(homes.length, 2)
+ let websiteIdentity
+
+ for (const [url, html] of homes) {
+ const documents = schemas(html)
+ assert.equal(documents.length, 2, url)
+ const websites = documents.filter((document) => document["@type"] === "WebSite")
+ const blogs = documents.filter((document) => document["@type"] === "Blog")
+ assert.equal(websites.length, 1, url)
+ assert.equal(blogs.length, 1, url)
+
+ const website = websites[0]
+ assert.equal(website.url, `${origin}/`, `localized path incorrectly identifies a separate website: ${url}`)
+ assert.equal(website["@id"], `${origin}/#website`, url)
+ assert.equal(website.name, "Devy Archive", url)
+ assert.equal(website.name, text(html.match(/]*>([\s\S]*?)<\/body>/)?.[1] ?? ""
+ const visibleContent = text(body.replace(/