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(
|
template = template.replace(
|
||||||
"</head>",
|
"</head>",
|
||||||
`<script type="application/ld+json">${JSON.stringify(homeLd).replace(/</g, "\\u003c")}</script>\n</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);
|
res.status(200).set({ "Content-Type": "text/html" }).end(template);
|
||||||
return;
|
return;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user