İçeriğe geç
Docs

Tema SEO’su

Tecof temalarında SEO — platformun hazır verdiği sitemap, robots.txt, alan adı ve sayfa düzeyi noindex, meta/OG alanları, çok dilli adresler ve 301’ler, özel kod, ürün beslemeleri; tema tarafında hreflang ve JSON-LD ekleme.

Son güncelleme:

Bu sayfa bir Tecof temasında arama motoru görünürlüğünün nasıl çalıştığını anlatır: platformun hazır verdiği parçalar ve tema geliştiricinin eklemesi gerekenler. Üretken yapay zekâ motorları için mağaza dosyaları ayrı sayfada: GEO: AI Storefront.

Platformun hazır verdikleri#

KonuNasıl çalışır
Sitemapapp/sitemap.ts; sayfalar ve ürün/kategori/marka/CMS detay sayfaları backend’den gelir
robots.txtapp/robots.txt/route.ts; panelde girilen içerik ya da varsayılan kurallar backend’den proxy’lenir
Alan adı düzeyi noindexPanelde “arama motorlarına kapalı” alan adı (ücretsiz tecof.site alt alan adı varsayılan olarak kapalı) ve yapım aşaması tüm sayfalarda noindex basar
Sayfa düzeyi noindexPanel → sayfa ayarları → SEO; şablon sayfadan türeyen ürün/CMS sayfalarına miras geçer
Meta ve OGSayfa başına başlık, açıklama ve OG görseli; CMS şablon sayfalarında token’larla doldurulur
Çok dilli adresler/[locale]/[...slug], dile özel adresler ve doğru dilin adresine 301
Özel kodSayfa başına <head> ve gövde kodu (piksel, doğrulama etiketi)
Ürün beslemeleriGoogle Merchant / Meta XML ve OpenAI CSV kataloğu (panel → E-ticaret → Ayarlar → Beslemeler)

Sitemap#

Mutlak adresler ziyaret edilen host’tan türetilir: aynı tema hem mağazanın kendi alan adında hem tecof.site alt alan adında yayında olabilir ve Google, sitemap’i hangi host’tan çektiyse içindeki adreslerin de o host’ta olmasını ister. Sıra: istek host’u → mağazanın birincil alan adı → NEXT_PUBLIC_SITE_URL. Adres çözülemezse boş sitemap döner (yanlış host’a işaret eden sitemap zararlıdır). Sitemap saatte bir yenilenir.

robots.txt#

Tema GET /api/store/robots.txt?host=<host> ucunu vitrin anahtarıyla proxy’ler; panelde içerik yoksa backend varsayılan kuralları döner. Backend’e ulaşılamazsa şu yedek servis edilir:

Metin
User-agent: *
Allow: /
Disallow: /api/
Disallow: /editor/
Disallow: /preview-component/
Disallow: /*/preview-component/
Disallow: /preview-template/
Disallow: /preview-starter/

Önizleme rotaları kimlik doğrulaması istemez; noindex arama motorunu keser, erişimi değil. Bu rotalarda gizli veri basmayın.

noindex kuralları#

  • Alan adı düzeyi karar kök layout’ta, merchant-info’daki noIndex (istek host’una göre) ya da isUnderConstruction ile verilir ve tüm sayfalara geçer.
  • Sayfa düzeyi robots yalnız sayfa kapalıyken yazılır. Açık sayfada index: true yazmayın: Next.js’te sayfanın robots alanı layout’unkini tamamen ezer ve alan adı düzeyindeki kapatma (ör. tecof.site) sessizce kalkar.
  • Başlangıç içeriğiyle gelen sayfalar, mağaza metinleri düzenleyip yayınlayana kadar noindex doğar; şablonların değeri türeyen detay sayfalarına miras geçer.
app/[locale]/[...slug]/page.tsx (özet)
export async function generateMetadata({ params }) {
  const { slug, locale } = await params;
  const page = await getPageData(slug.join("/"), locale, false);
  if (!page) return {};
  return {
    title: page.metaTitle || undefined,
    description: page.metaDescription || undefined,
    ...(page.noIndex && { robots: { index: false, follow: false } }),
    openGraph: { title: page.metaTitle || undefined, description: page.metaDescription || undefined },
  };
}

Çok dilli adresler#

POST /api/store/render yanıtı istenen dilin adresini (localizedSlug), dil → adres haritasını (slugAlternates) ve adres o dile ait değilse 301 hedefini (redirectTo) taşır. Çekirdek tema yanlış dilin adresini kalıcı olarak doğru adrese yönlendirir (/en/blog/ilk-yazi → /en/blog-en/first-post) ve haritayı dil değiştiricide kullanır. Taslak önizlemede yönlendirme yapılmaz.

Temada eklemeniz gerekenler#

hreflang#

Çekirdek tema slugAlternates haritasını bugün yalnız dil değiştiricide kullanır. Arama motorlarına dil karşılıklarını bildirmek için generateMetadata içinde alternates.languages üretin:

TypeScript
const base = `https://${host}`;
return {
  // …
  alternates: {
    canonical: `${base}/${locale}/${page.localizedSlug ?? slug.join("/")}`,
    languages: Object.fromEntries(
      Object.entries(page.slugAlternates ?? {}).map(([code, path]) => [code, `${base}/${code}/${path}`]),
    ),
  },
};

Yapılandırılmış veri (JSON-LD)#

Platform JSON-LD üretmez; ürün, içerik ve işletme bilgisini temanız basmalıdır. Ürün detay bölümünde:

components/ProductJsonLd.tsx
export function ProductJsonLd({ product, url }: { product: Product; url: string }) {
  const data = {
    "@context": "https://schema.org",
    "@type": "Product",
    name: product.name,
    image: product.images,
    description: product.description,
    sku: product.sku,
    brand: product.brand ? { "@type": "Brand", name: product.brand } : undefined,
    offers: {
      "@type": "Offer",
      url,
      priceCurrency: product.currency,
      price: product.price,
      availability: product.inStock ? "https://schema.org/InStock" : "https://schema.org/OutOfStock",
    },
  };
  return <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(data).replace(/</g, "\\u003c") }} />;
}

Önerilen şemalar: ürün sayfasında Product + BreadcrumbList, blog yazısında Article (ya da BlogPosting), ana sayfada Organization + WebSite, SSS bölümünde FAQPage. Değerleri her zaman vitrin API’sinin döndüğü gerçek veriden üretin; < karakterini kaçırın.

Görseller ve performans#

  • Görselleri TecofPicture ile basın; boyut varyantları ve odak noktası otomatik uygulanır (Yayın render’ı). Anlamlı alt metni verin.
  • Hero görselinde loading="eager" ve Next.js Image ile priority; diğerlerinde tembel yükleme.
  • Studio stil CSS’i sayfa başına yalnız kullanılan sınıflarla üretilir; ek CSS yükü getirmez.

SEO kontrol listesi#

  • Sayfa başlığı ve açıklaması her yayın sayfasında dolu; ürün/CMS şablonlarında token’larla.
  • OG görseli tanımlı; görseller TecofPicture ile ve alt metniyle.
  • Sayfa düzeyinde yalnız gerçekten gizlenecek sayfalar noindex.
  • Mağazanın kendi alan adı birincil alan adı olarak seçili; tecof.site kapalı.
  • sitemap.xml ve robots.txt canlı host’ta doğru adresleri veriyor.
  • Çok dilli mağazada hreflang alternatifleri basılıyor.
  • Ürün sayfalarında Product JSON-LD var.
  • Ürün beslemesi Merchant Center’a bağlı.