diff --git a/app/blog/[slug]/page.js b/app/blog/[slug]/page.js index e6baed4..4a8e173 100644 --- a/app/blog/[slug]/page.js +++ b/app/blog/[slug]/page.js @@ -19,16 +19,27 @@ export async function generateMetadata({ params }) { const { slug } = await params; const article = await getArticle(slug); if (!article) return { title: 'Статья не найдена' }; + const ogImages = article.cover_url + ? [{ url: article.cover_url.startsWith('http') ? article.cover_url : `https://zeropost.ru${article.cover_url}`, width: 1600, height: 900, alt: article.title }] + : [{ url: 'https://zeropost.ru/og-default.png', width: 1200, height: 630 }]; return { title: article.seo_title || article.title, description: article.seo_descr || article.excerpt, + alternates: { canonical: `https://zeropost.ru/blog/${slug}` }, openGraph: { title: article.title, description: article.excerpt, type: 'article', + url: `https://zeropost.ru/blog/${slug}`, publishedTime: article.published_at, tags: article.tags || [], - images: article.cover_url ? [{ url: article.cover_url }] : undefined, + images: ogImages, + }, + twitter: { + card: 'summary_large_image', + title: article.seo_title || article.title, + description: article.seo_descr || article.excerpt, + images: ogImages.map(i => i.url), }, }; } diff --git a/app/layout.js b/app/layout.js index 888e3d8..18dc3ec 100644 --- a/app/layout.js +++ b/app/layout.js @@ -7,12 +7,50 @@ export const metadata = { }, description: 'Блог про практическое применение искусственного интеллекта. Промпты, инструменты, кейсы — без воды.', metadataBase: new URL('https://zeropost.ru'), + keywords: ['искусственный интеллект', 'промпт-инжиниринг', 'ChatGPT', 'Claude', 'ИИ инструменты', 'автоматизация'], + authors: [{ name: 'ZeroPost', url: 'https://zeropost.ru' }], + creator: 'ZeroPost', + publisher: 'ZeroPost', + robots: { + index: true, + follow: true, + googleBot: { index: true, follow: true }, + }, openGraph: { type: 'website', locale: 'ru_RU', + url: 'https://zeropost.ru', siteName: 'ZeroPost', + title: 'ZeroPost — практические материалы про ИИ', + description: 'Блог про практическое применение искусственного интеллекта. Промпты, инструменты, кейсы — без воды.', + images: [ + { + url: '/og-default.png', + width: 1200, + height: 630, + alt: 'ZeroPost — практические материалы про ИИ', + }, + ], + }, + twitter: { + card: 'summary_large_image', + title: 'ZeroPost — практические материалы про ИИ', + description: 'Блог про практическое применение искусственного интеллекта. Промпты, инструменты, кейсы — без воды.', + images: ['/og-default.png'], + }, + icons: { + icon: [ + { url: '/favicon.svg', type: 'image/svg+xml' }, + { url: '/favicon-16x16.png', sizes: '16x16', type: 'image/png' }, + { url: '/favicon-32x32.png', sizes: '32x32', type: 'image/png' }, + ], + apple: [{ url: '/apple-touch-icon.png', sizes: '180x180' }], + other: [ + { rel: 'manifest', url: '/site.webmanifest' }, + ], }, alternates: { + canonical: 'https://zeropost.ru', types: { 'application/rss+xml': '/rss.xml' }, }, }; diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..c9d8ef6 Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000..337c4ac Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000..315228a Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..898cbb1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,4 @@ + + + Z + diff --git a/public/icon-192.png b/public/icon-192.png new file mode 100644 index 0000000..f031160 Binary files /dev/null and b/public/icon-192.png differ diff --git a/public/icon-512.png b/public/icon-512.png new file mode 100644 index 0000000..f47cb4b Binary files /dev/null and b/public/icon-512.png differ diff --git a/public/og-default.png b/public/og-default.png new file mode 100644 index 0000000..9045f4e Binary files /dev/null and b/public/og-default.png differ diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..c8bba24 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,13 @@ +{ + "name": "ZeroPost", + "short_name": "ZeroPost", + "description": "Практические материалы про ИИ", + "start_url": "/", + "display": "standalone", + "background_color": "#fafaf9", + "theme_color": "#10b981", + "icons": [ + { "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" }, + { "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" } + ] +}