added auto generating for sitemap.
This commit is contained in:
+52
-1
@@ -196,4 +196,55 @@ const slugs = await slugsAcrossLocales({ payload, collection: 'pages', id, confi
|
||||
`slugsAcrossLocales` robi osobne zapytanie z `locale: 'all'` — bo ten tryb
|
||||
zamienia KAŻDE zlokalizowane pole w mapę, co jest dobre dla sluga i złe dla
|
||||
reszty (mapa w title rozłożyłaby składanie tytułu). Dlatego czyta tylko slug,
|
||||
depth 0.
|
||||
depth 0.
|
||||
|
||||
## Sitemapa i robots.txt
|
||||
|
||||
Plugin składa sitemapę z hreflangiem per URL — te same buildery co metadane, więc
|
||||
nie rozjedzie się z tym, co strony serwują. Handlery są gotowe w
|
||||
`createContentHelpers`; klient re-eksportuje je jedną linią.
|
||||
|
||||
```ts
|
||||
// src/lib/content.ts
|
||||
export const { /* ... */, sitemap, robots } = createContentHelpers({
|
||||
config,
|
||||
content: contentConfig,
|
||||
i18n: i18nConfig, // wymagane dla sitemap (hreflang)
|
||||
baseUrl: process.env.NEXT_PUBLIC_SERVER_URL,
|
||||
})
|
||||
```
|
||||
|
||||
```ts
|
||||
// app/sitemap.ts
|
||||
export { sitemap as default } from '@/lib/content'
|
||||
|
||||
// app/robots.ts
|
||||
export { robots as default } from '@/lib/content'
|
||||
```
|
||||
|
||||
Next generuje z tego `/sitemap.xml` i `/robots.txt`. Nie da się tego schować
|
||||
całkiem w pluginie — Next tworzy te trasy wyłącznie z plików w `app/`, skanuje
|
||||
katalog projektu, nie node_modules. Ale re-eksport to maksimum redukcji: cała
|
||||
logika jest w pluginie.
|
||||
|
||||
Co zawiera sitemapa:
|
||||
- każdą stronę i wpis bloga, URL w domyślnym locale
|
||||
- `alternates.languages` → Next renderuje `<xhtml:link rel="alternate" hreflang>`
|
||||
per URL (to czyta Google przy wielu językach; zwykła sitemapa tego nie ma)
|
||||
- `lastModified` z realnego `updatedAt` dokumentu
|
||||
- wpisy bloga z prefiksem archiwum (`/pl/artykuly/moj-post`)
|
||||
|
||||
Pomija: drafty (`_status !== 'published'`) i dokumenty z `meta.noindex`.
|
||||
|
||||
Niskopoziomowo (własna trasa zamiast handlera z fabryki):
|
||||
|
||||
```ts
|
||||
import { buildSitemapEntries, buildRobots } from 'ipal-kit'
|
||||
|
||||
const entries = await buildSitemapEntries({
|
||||
payload, config: i18nConfig, baseUrl, content: contentConfig,
|
||||
})
|
||||
```
|
||||
|
||||
Przy dziesiątkach tysięcy URL-i Next ma `generateSitemaps` do dzielenia na
|
||||
części — dodasz, gdyby realnie było ich tyle. Jedna sitemapa wystarcza do ~50k.
|
||||
Reference in New Issue
Block a user