seo: GA4, breadcrumbs JSON-LD, IndexNow post-deploy, llms.txt
- Add GA4 (G-C9J0D8FFH3) to root layout alongside Yandex.Metrika - Add BreadcrumbList JSON-LD schema to all inner pages - Add scripts/indexnow.mjs — submits 30 URLs to IndexNow + Yandex on deploy - Add indexnow to postdeploy step in package.json - Update llms.txt with all 8 services and new pages (about/clients/partners) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
68
scripts/indexnow.mjs
Normal file
68
scripts/indexnow.mjs
Normal file
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env node
|
||||
// IndexNow — уведомляем поисковики об обновлении сайта после деплоя
|
||||
// https://www.indexnow.org/
|
||||
|
||||
const KEY = '40c65b722891b81d944f2c3fea6cab95'
|
||||
const HOST = 'sag24.ru'
|
||||
|
||||
const URLS = [
|
||||
'https://sag24.ru/ru/',
|
||||
'https://sag24.ru/en/',
|
||||
'https://sag24.ru/ru/about/',
|
||||
'https://sag24.ru/en/about/',
|
||||
'https://sag24.ru/ru/clients/',
|
||||
'https://sag24.ru/en/clients/',
|
||||
'https://sag24.ru/ru/partners/',
|
||||
'https://sag24.ru/en/partners/',
|
||||
'https://sag24.ru/ru/uslugi/',
|
||||
'https://sag24.ru/en/uslugi/',
|
||||
'https://sag24.ru/ru/uslugi/it-autsorsing/',
|
||||
'https://sag24.ru/en/uslugi/it-autsorsing/',
|
||||
'https://sag24.ru/ru/uslugi/kiberbezopasnost/',
|
||||
'https://sag24.ru/en/uslugi/kiberbezopasnost/',
|
||||
'https://sag24.ru/ru/uslugi/tehpodderzhka/',
|
||||
'https://sag24.ru/en/uslugi/tehpodderzhka/',
|
||||
'https://sag24.ru/ru/uslugi/videonablyudenie/',
|
||||
'https://sag24.ru/en/uslugi/videonablyudenie/',
|
||||
'https://sag24.ru/ru/uslugi/seti/',
|
||||
'https://sag24.ru/en/uslugi/seti/',
|
||||
'https://sag24.ru/ru/uslugi/servery/',
|
||||
'https://sag24.ru/en/uslugi/servery/',
|
||||
'https://sag24.ru/ru/uslugi/telefoniya/',
|
||||
'https://sag24.ru/en/uslugi/telefoniya/',
|
||||
'https://sag24.ru/ru/uslugi/oblako/',
|
||||
'https://sag24.ru/en/uslugi/oblako/',
|
||||
'https://sag24.ru/ru/faq/',
|
||||
'https://sag24.ru/en/faq/',
|
||||
'https://sag24.ru/ru/kontakty/',
|
||||
'https://sag24.ru/en/kontakty/',
|
||||
]
|
||||
|
||||
const ENDPOINTS = [
|
||||
'https://api.indexnow.org/indexnow',
|
||||
'https://yandex.com/indexnow',
|
||||
]
|
||||
|
||||
async function submit(endpoint) {
|
||||
const res = await fetch(endpoint, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json; charset=utf-8' },
|
||||
body: JSON.stringify({
|
||||
host: HOST,
|
||||
key: KEY,
|
||||
keyLocation: `https://${HOST}/${KEY}.txt`,
|
||||
urlList: URLS,
|
||||
}),
|
||||
})
|
||||
return res.status
|
||||
}
|
||||
|
||||
console.log(`IndexNow: submitting ${URLS.length} URLs...`)
|
||||
const results = await Promise.allSettled(ENDPOINTS.map(async ep => {
|
||||
const status = await submit(ep)
|
||||
console.log(` ${ep} → ${status}`)
|
||||
return status
|
||||
}))
|
||||
|
||||
const ok = results.every(r => r.status === 'fulfilled' && (r.value === 200 || r.value === 202))
|
||||
console.log(ok ? 'IndexNow: done.' : 'IndexNow: some errors (non-critical).')
|
||||
Reference in New Issue
Block a user