Files
egecankomur d49c9aa225 feat: SEO altyapısı + admin editör/favicon/menü düzeltmeleri
Admin & site:
- @tailwindcss/typography ekle → editör ve yayın içeriği prose stilleriyle düzgün render
- Favicon: logo.png'den kare app/icon.png + apple-icon.png, varsayılan favicon.ico kaldırıldı
- SEO keyword: seo_settings.default_keywords + seo_pages.keywords + buildMetadata birleştirme
- Menü düzeni admin'den yönetilebilir (site_settings.nav_items, /admin/menu, header & mobile-menu refactor)

SEO:
- app/sitemap.ts (statik + blog/hizmet/çözüm/proje/sektör dinamik)
- app/robots.ts (sitemap ref + /admin,/api disallow)
- app/llms.txt/route.ts (AI/LLM rehberi)
- BlogPosting/Service/FAQ/Article JSON-LD wire (json-ld bileşenleri bağlandı)
- buildMetadata: blog/proje OG görseli + type article + keywords birleştirme düzeltmesi
- blog tags → keyword
2026-06-04 07:15:18 +03:00

54 lines
1.9 KiB
TypeScript

import type { MetadataRoute } from "next";
import { siteConfig } from "@/lib/site-config";
import {
listIndustries,
listProjects,
listPublishedPosts,
listServices,
listSolutions,
} from "@/lib/data";
const BASE = siteConfig.url;
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const [posts, services, solutions, projects, industries] = await Promise.all([
listPublishedPosts({ limit: 200 }),
listServices(),
listSolutions(),
listProjects({ limit: 200 }),
listIndustries(),
]);
const staticRoutes: MetadataRoute.Sitemap = [
{ url: `${BASE}/`, changeFrequency: "weekly", priority: 1 },
{ url: `${BASE}/hizmetler`, changeFrequency: "monthly", priority: 0.9 },
{ url: `${BASE}/cozumler`, changeFrequency: "monthly", priority: 0.9 },
{ url: `${BASE}/projeler`, changeFrequency: "monthly", priority: 0.8 },
{ url: `${BASE}/blog`, changeFrequency: "daily", priority: 0.8 },
{ url: `${BASE}/hakkimizda`, changeFrequency: "yearly", priority: 0.6 },
{ url: `${BASE}/iletisim`, changeFrequency: "yearly", priority: 0.7 },
{ url: `${BASE}/site-analizi`, changeFrequency: "yearly", priority: 0.6 },
{ url: `${BASE}/cerez-politikasi`, changeFrequency: "yearly", priority: 0.2 },
];
const toEntry = (
path: string,
updatedAt?: string,
priority = 0.7,
): MetadataRoute.Sitemap[number] => ({
url: `${BASE}${path}`,
lastModified: updatedAt ? new Date(updatedAt) : undefined,
changeFrequency: "weekly",
priority,
});
return [
...staticRoutes,
...posts.map((p) => toEntry(`/blog/${p.slug}`, p.$updatedAt, 0.7)),
...services.map((s) => toEntry(`/hizmetler/${s.slug}`, s.$updatedAt, 0.8)),
...solutions.map((s) => toEntry(`/cozumler/${s.slug}`, s.$updatedAt, 0.8)),
...projects.map((p) => toEntry(`/projeler/${p.slug}`, p.$updatedAt, 0.7)),
...industries.map((i) => toEntry(`/sektor/${i.slug}`, i.$updatedAt, 0.6)),
];
}