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
80 lines
2.4 KiB
TypeScript
80 lines
2.4 KiB
TypeScript
import { Save } from "lucide-react";
|
||
import {
|
||
Checkbox,
|
||
Field,
|
||
FormActions,
|
||
FormShell,
|
||
GhostLink,
|
||
PageHeader,
|
||
PrimaryButton,
|
||
Textarea,
|
||
} from "@/components/admin/form";
|
||
import { MediaPicker } from "@/components/admin/media-picker";
|
||
import { saveSeoPage } from "@/lib/admin-actions";
|
||
import type { SeoPageRow } from "@/lib/types";
|
||
|
||
export function SeoPageForm({ row }: { row?: SeoPageRow }) {
|
||
return (
|
||
<div>
|
||
<PageHeader
|
||
title={row ? "Sayfa SEO override" : "Yeni sayfa SEO override"}
|
||
backHref="/admin/seo"
|
||
description="Sadece bu path için title/description/og bilgisini değiştir."
|
||
/>
|
||
<form action={saveSeoPage}>
|
||
{row && <input type="hidden" name="id" value={row.$id} />}
|
||
<FormShell>
|
||
<div className="grid gap-5">
|
||
<Field
|
||
label="Sayfa yolu (path)"
|
||
name="path"
|
||
required
|
||
defaultValue={row?.path}
|
||
placeholder="/hizmetler"
|
||
help="Örn: /, /hizmetler, /blog/yeni-yazi"
|
||
/>
|
||
<Field label="Başlık" name="title" defaultValue={row?.title} />
|
||
<Textarea
|
||
label="Açıklama"
|
||
name="description"
|
||
rows={3}
|
||
defaultValue={row?.description}
|
||
/>
|
||
<Textarea
|
||
label="Anahtar kelimeler"
|
||
name="keywords"
|
||
rows={2}
|
||
defaultValue={row?.keywords}
|
||
placeholder="web tasarım, kurumsal site, kocaeli"
|
||
help="Virgülle ayırın. Bu sayfaya özel; site geneli kelimelerle birleştirilir."
|
||
/>
|
||
<MediaPicker
|
||
label="OG görseli"
|
||
name="og_image"
|
||
defaultValue={row?.og_image}
|
||
help="Sosyal medya paylaşım görseli (1200×630 ideal)."
|
||
/>
|
||
<Field
|
||
label="Canonical URL"
|
||
name="canonical"
|
||
type="url"
|
||
defaultValue={row?.canonical}
|
||
/>
|
||
<Checkbox
|
||
label="Aramada gizle (noindex)"
|
||
name="noindex"
|
||
defaultChecked={row?.noindex ?? false}
|
||
/>
|
||
</div>
|
||
<FormActions>
|
||
<GhostLink href="/admin/seo">İptal</GhostLink>
|
||
<PrimaryButton>
|
||
<Save className="size-4" /> Kaydet
|
||
</PrimaryButton>
|
||
</FormActions>
|
||
</FormShell>
|
||
</form>
|
||
</div>
|
||
);
|
||
}
|