d49c9aa225
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
54 lines
1.9 KiB
TypeScript
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)),
|
|
];
|
|
}
|