Yönlendirme

Statigo'nun yönlendirme sistemi, SEO optimizasyonu ile çok dilli URL eşleme sağlar.

Rota Yapılandırması

Rotalar config/routes.json içinde tanımlanır:

{
  "routes": [
    {
      "canonical": "/about",
      "paths": {
        "en": "/en/about",
        "tr": "/tr/hakkinda"
      },
      "strategy": "static",
      "template": "about.html",
      "handler": "about",
      "title": "pages.about.title"
    }
  ]
}

Rota Alanları

AlanTürAçıklama
canonicalstringİsel kanonik yol (aramalar için kullanılır)
pathsobjectDile özgü URL yolları
strategystringÖnbellekleme stratejisi: static, incremental, dynamic, immutable
templatestringOluşturulacak şablon dosyası
handlerstringİşleyici adı (customHandlers haritasına kayıtlı)
titlestringSayfa başlığı (i18n anahtarı veya harf olabilir)

Çok Dilli Yönlendirme

Dile Özgü Yolları Tanımlama

Her rota farklı dillerde farklı URL'lere sahip olabilir:

{
  "canonical": "/features",
  "paths": {
    "en": "/en/features",
    "tr": "/tr/ozellikler",
    "de": "/de/funktionen"
  }
}

Mevcut Dile Erişim

İşleyicilerinizde:

import "statigo/framework/middleware"

func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    lang := middleware.GetLanguage(r.Context())
    // lang "en", "tr", vb.
}

Şablonlarınızda:

<p>Mevcut dil: {{.Lang}}</p>

SEO Özellikleri

Kanonik URL'ler

Statigo otomatik olarak kanonik URL'ler oluşturur:

<link rel="canonical" href="{{canonicalURL "/about" .Lang}}">

Alternatif Bağlantılar (Hreflang)

SEO için hreflang bağlantıları oluşturun:

{{alternateLinks "/about"}}

Çıktı:

<link rel="alternate" hreflang="en" href="https://example.com/en/about">
<link rel="alternate" hreflang="tr" href="https://example.com/tr/hakkinda">
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about">

Yerel Duyarlı Bağlantılar

Çevrilmiş URL'ler için localePath kullanın:

<a href="{{localePath "/about" .Lang}}">Hakkında</a>

Bu otomatik olarak çözümlenir:

  • İngilizce için /en/about
  • Türkçe için /tr/hakkinda

Kanonik Yol Ara Yazılımı

CanonicalPathMiddleware, kullanıcıların doğru dile özgü URL'ye yönlendirildiğinden emin olur:

r.Use(router.CanonicalPathMiddleware(routeRegistry))

Örnek yönlendirmeler:

  • /about/en/about (İngilizce kullanıcılar için)
  • /about/tr/hakkinda (Türkçe kullanıcılar için)

Programatik Rota Kaydı

import "statigo/framework/router"

// Kayıt defteri oluştur
routeRegistry := router.NewRegistry([]string{"en", "tr"})

// Programatik olarak bir rota tanımla
routeRegistry.Register(router.RouteDefinition{
    Canonical: "/contact",
    Paths: map[string]string{
        "en": "/en/contact",
        "tr": "/tr/iletisim",
    },
    Strategy: "static",
    Template: "contact.html",
    Handler:  "contact",
    Title:    "pages.contact.title",
})

// Rotaları chi yönlendiricisine kaydet
routeRegistry.RegisterRoutes(r, nil)

Dinamik Rotalar

Dinamik rotalar için (örn. blog gönderileri), chi'nin rota parametrelerini kullanın:

r.Get("/{lang}/blog/{slug}", blogHandler.ServeHTTP)

İşleyicinizdeki parametrelere erişin:

slug := chi.URLParam(r, "slug")
lang := middleware.GetLanguage(r.Context())

Yönlendirmeler

config/redirects.json içinde statik yönlendirmeleri yapılandırın:

{
  "redirects": [
    {
      "from": "/old-page",
      "to": "/new-page",
      "type": 301
    },
    {
      "from": "/blog/*",
      "to": "/articles/*",
      "type": 301,
      "pattern": true
    }
  ]
}

Yönlendirme ara yazılımını uygulayın:

r.Use(middleware.RedirectMiddleware(configFS, "redirects.json", logger))