dana-medical-site/web/scripts/seo-document.mjs
2026-10-14 13:33:13 +00:00

21 lines
1.3 KiB
JavaScript

export function escapeHTML(text) {
return String(text).replace(/[&<>"']/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' })[c]);
}
export function createDocument(template, rendered) {
const m = rendered.metadata;
const escape = escapeHTML;
const schema = rendered.schema ? `<script id="page-schema" type="application/ld+json">${JSON.stringify(rendered.schema).replace(/</g, '\\u003c')}</script>\n` : '';
const head = `<title>${escape(m.title)}</title>\n` +
`<meta name="description" content="${escape(m.description)}">\n` +
`<link rel="canonical" href="${escape(m.canonical)}">\n` +
`<meta property="og:type" content="website">\n<meta property="og:locale" content="ru_RU">\n` +
`<meta property="og:title" content="${escape(m.title)}">\n` +
`<meta property="og:description" content="${escape(m.description)}">\n` +
`<meta property="og:url" content="${escape(m.canonical)}">\n` +
(m.image ? `<meta property="og:image" content="${escape(m.image)}">\n` : '') + schema;
return template.replace(/<title>[\s\S]*?<\/title>/, '').replace(/<meta name="description"[^>]*>/, '')
.replace('</head>', `${head}</head>`)
.replace('<div id="root"></div>', `<div id="root">${rendered.html}</div>\n<script id="page-data" type="application/json">${rendered.initial}</script>`);
}