naslovnica: strezniski seznam zadnjih 40 clankov v HTML, da robot dobi povezave brez izrisa JavaScripta
This commit is contained in:
@@ -319,6 +319,30 @@ export function serveStatic(app: Express) {
|
||||
template = template.replace(
|
||||
"</head>",
|
||||
`<script type="application/ld+json">${JSON.stringify(homeLd).replace(/</g, "\\u003c")}</script>\n</head>`);
|
||||
|
||||
// 31. 8. 2026: naslovnica je React aplikacija, zato je robot dobil samo
|
||||
// lupino brez ene same povezave na clanek. Clanki se do Googla pridejo
|
||||
// prek sitemapa, a odkrivanje je pocasnejse. Zato v #root vpisemo se
|
||||
// strezniski seznam zadnjih 40 clankov; React ga ob zagonu zamenja s
|
||||
// pravo mrezo, robot pa povezave dobi takoj in brez izrisa JavaScripta.
|
||||
try {
|
||||
const vsi = await storage.getArticles();
|
||||
const zadnji = [...vsi]
|
||||
.sort((a: any, b: any) => String(b.publishedAt).localeCompare(String(a.publishedAt)))
|
||||
.slice(0, 40);
|
||||
if (zadnji.length) {
|
||||
const seznam = zadnji
|
||||
.filter((a: any) => a.slug && a.title)
|
||||
.map((a: any) =>
|
||||
`<li><a href="/article/${escapeHtml(a.slug)}">${escapeHtml(a.title)}</a></li>`)
|
||||
.join("");
|
||||
const blok = `<div id="ssr-neueste"><h2>Neueste Artikel</h2><ul>${seznam}</ul>` +
|
||||
`<p><a href="/category/News">Alle Nachrichten</a></p></div>`;
|
||||
template = template.replace('<div id="root"></div>', () => `<div id="root">${blok}</div>`);
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
res.status(200).set({ "Content-Type": "text/html" }).end(template);
|
||||
return;
|
||||
} catch (e) {
|
||||
|
||||
Reference in New Issue
Block a user