SEO / Meta
Bu belge sayfa başlığı, açıklama, sosyal önizleme ve dil alternatifleri içindir.
Sitemap (URL listesi, robots.txt) ayrı sayfada: Sitemap — burada tekrarlanmaz.
SEO / Meta Nedir?
Section titled “SEO / Meta Nedir?”Arama motorları ve sosyal ağlar her sayfada şunlara bakar:
| Öğe | Kullanıcıda görünen | Nerede tanımlı |
|---|---|---|
| Title | Sekme / arama başlığı | <title> |
| Description | Arama sonucu özeti | <meta name="description"> |
| Canonical | “Asıl URL bu” | <link rel="canonical"> |
| hreflang | Dil alternatifleri | <link rel="alternate" hreflang="..."> |
| Open Graph | WhatsApp, LinkedIn önizlemesi | og:* meta |
| Twitter Card | X (Twitter) önizlemesi | twitter:* meta |
Falcon’da bunların çoğu tek yerden (BaseLayout) ve varsayılan config (seo.ts, site.ts) ile yönetilir.
Ne Yaptık?
Section titled “Ne Yaptık?”1. Varsayılanlar — src/config/seo.ts
Section titled “1. Varsayılanlar — src/config/seo.ts”Site geneli yedek değerler:
defaultTitle,defaultDescriptiondefaultImage→/og/default.svgtwitterHandle(boş olabilir)ogLocale→ dil başına (en_GB,tr_TR, …)
Sayfa kendi title / description vermezse bunlar kullanılır.
2. Domain — src/config/site.ts
Section titled “2. Domain — src/config/site.ts”url— canonical, OG görsel ve hreflang’de tam adres için (https://...)name,logo— OrganizationSchema JSON-LD’de kullanılır
Sitemap de aynı site.url’i kullanır; production’da birlikte güncellenir.
3. Dil URL Eşlemesi — src/i18n/routing.ts
Section titled “3. Dil URL Eşlemesi — src/i18n/routing.ts”getAlternatePaths(pathname):
src/config/routes.tsiçindekisitePages(ör.home,blog) için EN/TR/DE/FR path’leri üretir- Bilinmeyen path’lerde önek swap fallback (
/tr,/de,/fr)
Bu liste hreflang linklerinin kaynağıdır.
4. Layout — src/layouts/BaseLayout.astro
Section titled “4. Layout — src/layouts/BaseLayout.astro”Her public sayfa bu layout’u kullanır; <head> içinde otomatik:
title,descriptioncanonical=site.url+ pathnamehreflang(4 dil +x-default→ EN)- Open Graph + Twitter Card
og:image=site.url+defaultImage(veya sayfaimageprop’u)
Props:
<BaseLayout title="Sayfa başlığı" description="Kısa açıklama" image="/og/ozel.svg" alternatePaths={...}/>alternatePaths yalnızca blog çevirisi gibi özel durumlarda verilir; yoksa getAlternatePaths devreye girer.
5. OG Görseli — public/og/default.svg
Section titled “5. OG Görseli — public/og/default.svg”Sosyal paylaşımda kullanılan varsayılan görsel. Önemli sayfalar için ileride image prop ile override edilebilir.
6. Blog Çevirisi — translationKey
Section titled “6. Blog Çevirisi — translationKey”Aynı yazının dilleri frontmatter ile eşlenir:
translationKey: welcomelocale: ensrc/lib/blog.ts → getBlogAlternatePaths() aynı key’e sahip yazıların URL’lerini hreflang’e yazar.
Örnek: /blog/welcome/ ↔ /tr/blog/hos-geldiniz/ birbirine hreflang ile bağlı.
- Key varsa → tüm çeviri URL’leri hreflang’de
- Key yoksa → yalnızca o yazının dili (tek dil, doğru)
Blog slug sayfaları SSR ile findPostBySlug + alternatePaths kullanır.
Nasıl Kullanılır?
Section titled “Nasıl Kullanılır?”Yeni Statik Sayfa (Contact; Hakkımızda Henüz Yok — Aynı Akışla Eklenebilir)
Section titled “Yeni Statik Sayfa (Contact; Hakkımızda Henüz Yok — Aynı Akışla Eklenebilir)”src/config/routes.ts→ yenipageIdve her dilin path’isrc/pages/...+ mirror (tr/,de/,fr/)- Layout’ta kendi title ve description:
<BaseLayout title="İletişim — Falcon" description="Bize ulaşın.">Açıklama vermezseniz tüm sayfalar Google’da aynı defaultDescription ile görünebilir.
Ana Sayfa / Blog Listesi
Section titled “Ana Sayfa / Blog Listesi”Zaten description prop’u var; metinleri seo.ts veya sayfa bazlı güncelleyin.
Yeni Blog Yazısı + Çeviri
Section titled “Yeni Blog Yazısı + Çeviri”- Her dil için ayrı MDX (
welcome.mdx,hos-geldiniz.mdx) - Aynı
translationKey, farklılocaleve farklı slug (id) - Build sonrası her URL’nin kaynak kodunda hreflang’i kontrol edin
Yeni Site Sayfası Ve Hreflang
Section titled “Yeni Site Sayfası Ve Hreflang”Önce routes.ts’e ekleyin. getAlternatePaths yalnızca sitePages’te kayıtlı path’leri tam eşler; kayıtsız sayfalar fallback (prefix swap) kullanır — mümkünse her sayfayı sitePages’e ekleyin.
Production’da Güncellenecekler
Section titled “Production’da Güncellenecekler”| Dosya | Ne |
|---|---|
src/config/site.ts | url → canlı domain |
src/config/contact.ts | Telefon, e-posta, adres (OrganizationSchema) |
src/config/social.ts | Dolu sosyal profil URL’leri |
src/config/sector.ts | İşletme tipi → schema @type |
src/config/seo.ts | defaultTitle, defaultDescription, twitterHandle |
public/robots.txt | Sitemap satırı (Sitemap sayfasına bakın) |
public/og/default.svg | İsterseniz marka görseli ile değiştirin |
Domain değişince mutlaka site.url güncelleyin; canonical ve OG kırık domain göstermesin.
Nelere Dikkat Et?
Section titled “Nelere Dikkat Et?”| Yap | Yapma |
|---|---|
Önemli sayfalara özel title + description | Her sayfayı varsayılan SEO’ya bırakma |
Çeviri blog’da aynı translationKey | Aynı içeriği key’siz farklı slug’larda bırakma |
Path’leri routes.ts’te tanımla | hreflang için URL’yi elle <head>’e yazma |
| Paylaşım görseli 1200×630 civarı düşün (OG) | Çok küçük veya göreli path (og:image mutlak URL ister) |
Sitemap ile ilişki: Sitemap URL keşfi; meta etiketleri tıklama/snippet kalitesi. İkisi birbirini tamamlar, biri diğerinin yerine geçmez.
Yapısal Veri (OrganizationSchema)
Section titled “Yapısal Veri (OrganizationSchema)”Google’a sitenin kim olduğunu JSON-LD ile anlatır (işletme adı, telefon, e-posta, adres, logo, sosyal profiller). Arama sonucu başlığı değiştirmez; zengin sonuç / bilgi paneli için kullanılır.
Dosyalar
Section titled “Dosyalar”| Dosya | Görevi |
|---|---|
src/config/contact.ts | Telefon, e-posta, WhatsApp, adres |
src/config/social.ts | Sosyal URL’ler → sameAs (boş olanlar dahil edilmez) |
src/config/sector.ts | İşletme tipi → schema @type |
src/components/layout/OrganizationSchema.astro | JSON-LD üretir |
BaseLayout.astro | Her sayfada <OrganizationSchema /> |
Schema Tipi
Section titled “Schema Tipi”sector.type | JSON-LD @type |
|---|---|
generic (varsayılan) | LocalBusiness |
agency | ProfessionalService |
Production’da Güncelle
Section titled “Production’da Güncelle”contact.ts— gerçek iletişim bilgilerisocial.ts— dolu profil linklerisite.ts—url(canlı domain)
Kontrol
Section titled “Kontrol”Sayfa kaynağında application/ld+json ve schema.org arayın. Google Rich Results Test ile doğrulayabilirsiniz.
Dosya Özeti
Section titled “Dosya Özeti”src/config/seo.ts → varsayılan title, description, OG localesrc/config/site.ts → url, name, logosrc/config/contact.ts → telefon, e-posta, adressrc/config/social.ts → sameAs (sosyal profiller)src/config/sector.ts → LocalBusiness / ProfessionalServicesrc/config/routes.ts → sitePages (hreflang kaynağı)src/i18n/routing.ts → getAlternatePathssrc/layouts/BaseLayout.astro → tüm meta etiketleri + OrganizationSchemasrc/components/layout/OrganizationSchema.astro → JSON-LDsrc/lib/blog.ts → getBlogAlternatePathspublic/og/default.svg → varsayılan paylaşım görseliDoğrulama
Section titled “Doğrulama”Build sonrası bir sayfanın kaynak kodunda arayın:
<link rel="canonical"<meta property="og:title"<link rel="alternate" hreflang="tr"application/ld+jsonveschema.org(OrganizationSchema)
Blog çifti: EN ve TR yazı sayfalarında karşılıklı hreflang linkleri.
SEO / Meta = her sayfanın başlık, açıklama, canonical, dil alternatifleri ve sosyal önizlemesi. Falcon’da merkez: seo.ts, site.ts, routes.ts, BaseLayout. Blog çevirisi: translationKey. Yapısal veri: contact.ts, social.ts, sector.ts, OrganizationSchema. Sitemap ayrı belgede.