SEO
Xingluo venas kun plena SEO-subteno: Open Graph, Twitter Card, canonical, JSON-LD strukturitaj datumoj, dinamikaj OG-bildoj, RSS, retmapo kaj hreflang multlingvaj deklaroj.
Eligo de head
La <head> en src/layouts/Layout.astro eligas:
charset,viewportfavicon(public/favicon.svg)canonical(kanona ligilo)title,meta title,meta description,meta authorsitemapligilo- Open Graph:
og:type,og:site_name,og:title,og:description,og:url,og:image - Twitter Card:
twitter:card,twitter:title,twitter:description,twitter:image - RSS alternativa ligilo
- hreflang alternativaj ligiloj (po lingvo + x-default)
theme-color(plenigita dum rultempo pertheme.ts)google-site-verification(kondiĉa)
Paĝa meta de afiŝo
src/layouts/PostLayout.astro injektas afiŝ-specifajn metadatenojn per <Fragment slot="head">:
og:type = articlearticle:published_time(ISO 8601)article:modified_time(semodDatetimeestas fiksita)- JSON-LD
BlogPostingstrukturitaj datumoj:
json{ "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Titolo de afiŝo", "image": "URL de OG-bildo", "datePublished": "2026-06-19T10:00:00.000Z", "dateModified": "2026-06-20T10:00:00.000Z", "author": [ { "@type": "Person", "name": "Nomo de aŭtoro", "url": "Ĉefpaĝo de aŭtoro" } ] }
Normaligo de canonical
La kanona strategio sur paĝoj de detaloj de afiŝoj (PostDetailView.astro):
- Propra
canonicalURLen frontmatter → uzata unue - La nuna afiŝo estas reala traduko por ĉi tiu lingvo (
localekongruas kun la paĝa lingvo) → montras al sia propra URL - La nuna afiŝo estas rezerva enhavo (neniu traduko havebla, uzante la originalon) → montras al la originala URL de la defaŭlta lingvo
Strategio 3 certigas ke serĉiloj ne traktas paĝojn sen sendependaj tradukoj kiel duoblan enhavon. Afiŝoj kun sendependaj tradukoj havas canonical montrantan al si mem kaj povas esti indeksitaj aparte.
BreadcrumbList strukturitaj datumoj
Ĉiuj paĝoj kun paneroj (afiŝolisto, etikedindekso, etikedaj afiŝolistoj, arkivoj, pri, serĉo) aŭtomate eligas BreadcrumbList JSON-LD strukturitajn datumojn:
json{ "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Ĉefpaĝo", "item": "https://..." }, { "@type": "ListItem", "position": 2, "name": "Afiŝoj", "item": "https://.../posts/" } ] }
Kiam la lasta panereto ne havas ligilon (nuna paĝo), la URL de la nuna paĝo estas uzata kiel item. Paĝoj de detaloj de afiŝoj ne uzas la paneretan komponanton kaj do ne eligas ĉi tiujn strukturitajn datumojn.
Open Graph-bildoj
Dinamika generado
Kun features.dynamicOgImage ebligita (defaŭlta), Xingluo dinamike generas 1200×630 OG-bildojn uzante satori + sharp:
- Nivelo de retejo:
src/pages/og.png.ts, por paĝoj sen propra OG-bildo - Nivelo de afiŝo:
src/pages/posts/[...slug]/og.png.ts, generita nur por afiŝoj senogImage
Tiparoj
OG-bildoj uzas Noto Sans SC (vidu la agordon fonts en astro.config.ts, CSS-variablo --font-og), ŝarĝita per fontData de astro:assets. La tiparo estas nur por satori kaj ne estas injektita en retejan CSS.
Rezervoj
- Tiparo nehavebla (sen reto) → rezervas al 1×1 lokokupila PNG (ne malsukcesigas la konstruon)
dynamicOgImagemalŝaltita → uzas la statikan defaŭltan OG-bildon subpublic/
Rezolucio de OG-bildo de afiŝo
La kvar-nivela rezervo en PostDetailView.astro:
- frontmatter
ogImageestas ĉeno → uzi rekte - frontmatter
ogImageestasimage()objekto → uzi.src dynamicOgImageebligita → uzi la afiŝ-nivelanog.pngfinpunkton- Alie → reteja defaŭlta statika OG-bildo
RSS
src/pages/rss.xml.ts generas la RSS-fluon:
- Titolo, priskribo kaj reteja URL devenas de la agordo
site - Elementoj devenas de
getSortedPosts(skizoj kaj planitaj afiŝoj jam filtritaj) linkde ĉiu elemento estasgetPostUrl(id, filePath, config.site.lang)pubDateestasmodDatetime ?? pubDatetime
Layout.astro injektas la RSS-aŭtomalkovran ligilon:
html<link rel="alternate" type="application/rss+xml" title="..." href=".../rss.xml" />
Retmapo
La @astrojs/sitemap integriĝo (vidu astro.config.ts):
filter: filtras arkivajn paĝvojojn surbaze defeatures.showArchivesi18n: ebligas aŭtomatan hreflang-generadon, mapantezh-cn → zh-CN,en → en, kun defaultLocalezh-cn
Generas sitemap-index.xml kaj po-lingvajn alternativajn deklarojn; robots.txt referencas la retmapon.
hreflang plurlingvaj deklaroj
Layout.astro eligas <link rel="alternate"> por ĉiu lingvo:
html<link rel="alternate" hreflang="zh-CN" href="https://.../posts/welcome/" /> <link rel="alternate" hreflang="en" href="https://.../en/posts/welcome/" /> <link rel="alternate" hreflang="x-default" href="https://.../posts/welcome/" />
Vojoj estas normaligitaj per parseLocaleFromPath(stripBase(...)) post forigo de prefiksoj, certigante ke ĉiu lingvo mapiĝas al la ĝusta URL. x-default indikas al la defaŭlta lingvo.
robots.txt
src/pages/robots.txt.ts generas:
User-agent: * Allow: / Sitemap: https://site-url/sitemap-index.xml
Konfirmo de retejo
Konfirmo de Google Search Console estas agordita per site.googleVerification du-maniere:
- Media variablo
PUBLIC_GOOGLE_SITE_VERIFICATION(rultempa injekto) - La kampo
site.googleVerificationenxingluo.config.ts
Renderita kiel <meta name="google-site-verification" content="...">.
Rilataj artikoloj
Deplojo
2 min legadoGvidilo pri deplojo de Xingluo kovranta statikajn gastigajn platformojn (Netlify/Vercel/GitHub Pages), Nginx-memgastigadon, Docker kaj mediajn variablojn.
Serĉo
1 min legadoGvidilo pri serĉo de Xingluo kovranta Flexsearch-plentekstan serĉintegriĝon, indeksgeneradon, UI, plurlingvan serĉon kaj rendimenton.