WordPress’e WebSite Schema ve Sitelinks Searchbox Nasıl Eklenir
Google’ın arama sonuçlarında sitenizin öne çıkması için sadece iyi içerik yazmak yetmiyor. Teknik SEO tarafında da bir sürü şey yapmanız gerekiyor. Bu yazıda, WordPress sitenize Schema markup ve Sitelinks Searchbox eklemenin tam olarak nasıl yapıldığını, neden önemli olduğunu ve functions.php üzerinden nasıl yönetebileceğinizi anlatacağım.
Schema Markup Nedir ve Neden Önemlidir
Schema markup, arama motorlarına sitenizin içeriği hakkında yapılandırılmış veri sunmanın standardize edilmiş yoludur. Schema.org tarafından tanımlanan bu standartlar, Google, Bing, Yahoo gibi büyük arama motorları tarafından destekleniyor.
Bir siteye Schema eklemediğinizde, Google içeriğinizi yorumlamaya çalışır. Schema eklediğinizde ise ona direkt olarak “Bu bir organizasyon, şu bilgiler bunlar” diyorsunuz. Fark büyük.
Pratik faydaları şöyle sıralayabiliriz:
- Rich Snippets: Arama sonuçlarında yıldız, fiyat, ürün bilgisi gibi zengin gösterimler alırsınız
- Sitelinks Searchbox: Arama sonuçlarında sitenizin altında arama kutusu çıkar
- Knowlegde Panel: Markanız için Google’ın sağ tarafta bilgi kartı oluşturması kolaylaşır
- Tıklama Oranı: Rich snippet gören kullanıcılar daha çok tıklar
- Brand Authority: Google gözünde sitenizin güvenilirliği artar
WebSite Schema Nedir
WebSite schema, en temel Schema türlerinden biridir. Sitenizin genel bilgilerini arama motorlarına tanıtır. JSON-LD formatında eklenen bu kod bloğu, siteniz hakkında şu bilgileri Google’a iletir:
- Sitenin adı
- Sitenin URL’si
- Potansiyel arama aksiyonu (Sitelinks Searchbox için)
- Açıklama
- Dil bilgisi
WebSite schema olmadan Sitelinks Searchbox aktif edilemiyor. Bu iki kavram birbirinin tamamlayıcısı.
Sitelinks Searchbox Nedir
Google’da büyük bir marka adı aradığınızda, bazen o markanın sitenin tam altında küçük bir arama kutusu çıktığını görmüşsünüzdür. Mesela “Amazon” veya “Wikipedia” arattığınızda. İşte bu Sitelinks Searchbox.
Kullanıcı doğrudan sizin siteniz içinde arama yapabilir ve sonuçlara gider. Bu özellik için Google şart koşuyor:
- Sitenizde bir site içi arama fonksiyonu olmalı
- SearchAction schema doğru tanımlanmış olmalı
- Siteniz yeterli otoriteye sahip olmalı (küçük siteler için göstermeyebilir)
WordPress zaten dahili bir arama motoruna sahip, yani teknik altyapı mevcut. Sadece Google’a bunu schema ile bildirmeniz yeterli.
Functions.php Üzerinden Schema Ekleme
En pratik ve temiz yöntem, schema kodunu functions.php üzerinden wp_head kancasına eklemektir. Plugin kullanmak istemiyorsanız ya da mevcut plugin ile çakışma yaşıyorsanız bu yöntem idealdir.
Temel WebSite Schema
Önce en basit haliyle başlayalım:
function add_website_schema() {
$schema = [
'@context' => 'https://schema.org',
'@type' => 'WebSite',
'name' => get_bloginfo('name'),
'url' => home_url('/'),
];
echo '<script type="application/ld+json">';
echo wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
echo '</script>' . "n";
}
add_action('wp_head', 'add_website_schema');
Bu kod çalışır ama eksik. Hadi genişletelim.
Sitelinks Searchbox Dahil Tam WebSite Schema
function add_website_schema_with_searchbox() {
$search_url = home_url('/?s={search_term_string}');
$schema = [
'@context' => 'https://schema.org',
'@type' => 'WebSite',
'name' => get_bloginfo('name'),
'alternateName' => get_bloginfo('description'),
'url' => home_url('/'),
'potentialAction' => [
'@type' => 'SearchAction',
'target' => [
'@type' => 'EntryPoint',
'urlTemplate' => $search_url,
],
'query-input' => 'required name=search_term_string',
],
];
echo '<script type="application/ld+json">';
echo wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
echo '</script>' . "n";
}
add_action('wp_head', 'add_website_schema_with_searchbox');
Bu kodda potentialAction kısmı Sitelinks Searchbox’ı aktif eden bölümdür. {search_term_string} bir placeholder, Google bunu otomatik olarak kullanıcının yazdığı terimle değiştirir.
Sadece Ana Sayfada Gösterme
Schema’yı her sayfada göstermeye gerek yok, hatta önerilmiyor. WebSite schema genellikle sadece ana sayfada gösterilir:
function add_website_schema_homepage_only() {
if ( ! is_front_page() ) {
return;
}
$search_url = home_url('/?s={search_term_string}');
$schema = [
'@context' => 'https://schema.org',
'@type' => 'WebSite',
'name' => get_bloginfo('name'),
'alternateName' => get_bloginfo('description'),
'url' => home_url('/'),
'inLanguage' => get_locale(),
'potentialAction' => [
'@type' => 'SearchAction',
'target' => [
'@type' => 'EntryPoint',
'urlTemplate' => $search_url,
],
'query-input' => 'required name=search_term_string',
],
];
echo '<script type="application/ld+json">';
echo wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
echo '</script>' . "n";
}
add_action('wp_head', 'add_website_schema_homepage_only');
Organization Schema ile Birleştirme
Gerçek dünya senaryosunda WebSite schema’yı Organization schema ile birlikte kullanmak çok daha güçlü bir sinyal gönderir. İki ayrı JSON-LD bloğu kullanabileceğiniz gibi, tek bir fonksiyonda da yönetebilirsiniz:
function add_combined_schema() {
if ( ! is_front_page() ) {
return;
}
$site_name = get_bloginfo('name');
$site_url = home_url('/');
$search_url = home_url('/?s={search_term_string}');
$logo_url = get_theme_mod('custom_logo')
? wp_get_attachment_image_url(get_theme_mod('custom_logo'), 'full')
: '';
// WebSite Schema
$website_schema = [
'@context' => 'https://schema.org',
'@type' => 'WebSite',
'name' => $site_name,
'url' => $site_url,
'potentialAction' => [
'@type' => 'SearchAction',
'target' => [
'@type' => 'EntryPoint',
'urlTemplate' => $search_url,
],
'query-input' => 'required name=search_term_string',
],
];
// Organization Schema
$org_schema = [
'@context' => 'https://schema.org',
'@type' => 'Organization',
'name' => $site_name,
'url' => $site_url,
];
if ( $logo_url ) {
$org_schema['logo'] = $logo_url;
}
// Sosyal medya profilleri varsa ekleyin
$social_profiles = [
'https://twitter.com/sitenizinadı',
'https://www.facebook.com/sitenizinadı',
'https://www.linkedin.com/company/sitenizinadı',
];
$org_schema['sameAs'] = $social_profiles;
// Her iki schema'yı da çıkar
echo '<script type="application/ld+json">';
echo wp_json_encode($website_schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
echo '</script>' . "n";
echo '<script type="application/ld+json">';
echo wp_json_encode($org_schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
echo '</script>' . "n";
}
add_action('wp_head', 'add_combined_schema');
sameAs array’indeki sosyal medya URL’lerini kendi profillerinizle değiştirmeyi unutmayın. Bu, Google’ın markanızı sosyal profillerle ilişkilendirmesini sağlar.
WooCommerce için Gelişmiş Schema
Eğer WooCommerce kullanıyorsanız, WebSite schema’yı biraz daha özelleştirmeniz gerekebilir. WooCommerce arama URL yapısı farklı olduğu için:
function add_woocommerce_website_schema() {
if ( ! is_front_page() ) {
return;
}
// WooCommerce aktif mi kontrol et
$is_woo = class_exists('WooCommerce');
// WooCommerce varsa ürün arama, yoksa normal arama
if ( $is_woo ) {
$search_url = home_url('/?s={search_term_string}&post_type=product');
} else {
$search_url = home_url('/?s={search_term_string}');
}
$schema = [
'@context' => 'https://schema.org',
'@type' => 'WebSite',
'name' => get_bloginfo('name'),
'url' => home_url('/'),
'potentialAction' => [
'@type' => 'SearchAction',
'target' => [
'@type' => 'EntryPoint',
'urlTemplate' => $search_url,
],
'query-input' => 'required name=search_term_string',
],
];
echo '<script type="application/ld+json">';
echo wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
echo '</script>' . "n";
}
add_action('wp_head', 'add_woocommerce_website_schema');
WooCommerce’de arama yapıldığında sonuçlar ürün sayfasına yönlendirilir. post_type=product parametresi bunu sağlar. Eğer tüm içerikleri aramak istiyorsanız bu parametreyi kaldırabilirsiniz.
Dinamik ve Ayarlanabilir Schema Sistemi
Daha büyük projeler için, schema bilgilerini WordPress Customizer ya da options tablosundan çeken bir yapı kurmak mantıklıdır:
function add_configurable_website_schema() {
if ( ! is_front_page() ) {
return;
}
// Bu değerleri wp_options'tan veya customizer'dan alabilirsiniz
// Örnek: update_option('schema_site_name', 'Benim Sitem');
$site_name = get_option('schema_site_name', get_bloginfo('name'));
$site_url = get_option('schema_site_url', home_url('/'));
$alt_name = get_option('schema_alt_name', '');
$custom_search = get_option('schema_custom_search_url', '');
// Özel arama URL'si tanımlandıysa onu kullan
$search_url = $custom_search
? $custom_search
: home_url('/?s={search_term_string}');
$schema = [
'@context' => 'https://schema.org',
'@type' => 'WebSite',
'name' => sanitize_text_field($site_name),
'url' => esc_url($site_url),
];
if ( ! empty($alt_name) ) {
$schema['alternateName'] = sanitize_text_field($alt_name);
}
$schema['potentialAction'] = [
'@type' => 'SearchAction',
'target' => [
'@type' => 'EntryPoint',
'urlTemplate' => $search_url,
],
'query-input' => 'required name=search_term_string',
];
echo '<script type="application/ld+json">';
echo wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
echo '</script>' . "n";
}
add_action('wp_head', 'add_configurable_website_schema');
Bu yapıyla şu komutlarla değerleri ayarlayabilirsiniz:
// wp-cli ile options tablosunu güncellemek için
wp option update schema_site_name "Benim Harika Sitem"
wp option update schema_alt_name "Kisa Site Adi"
wp option update schema_custom_search_url "https://sitem.com/ara/?q={search_term_string}"
Mevcut SEO Plugin ile Çakışmayı Önleme
Yoast SEO, RankMath veya All-in-One SEO kullanıyorsanız, bu pluginler zaten bazı schema tiplerini ekliyor olabilir. Çakışma yaşamamak için fonksiyonunuza kontrol ekleyin:
function add_schema_if_no_seo_plugin() {
// Yoast SEO aktifse atla
if ( defined('WPSEO_VERSION') ) {
return;
}
// RankMath aktifse atla
if ( defined('RANK_MATH_VERSION') ) {
return;
}
// All in One SEO aktifse atla
if ( defined('AIOSEO_VERSION') ) {
return;
}
if ( ! is_front_page() ) {
return;
}
$schema = [
'@context' => 'https://schema.org',
'@type' => 'WebSite',
'name' => get_bloginfo('name'),
'url' => home_url('/'),
'potentialAction' => [
'@type' => 'SearchAction',
'target' => [
'@type' => 'EntryPoint',
'urlTemplate' => home_url('/?s={search_term_string}'),
],
'query-input' => 'required name=search_term_string',
],
];
echo '<script type="application/ld+json">';
echo wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
echo '</script>' . "n";
}
add_action('wp_head', 'add_schema_if_no_seo_plugin');
Mesela Yoast SEO WebSite schema ekliyor ama Sitelinks Searchbox özelliğini premium versiyonda sunuyor. Free versiyonda bunu devre dışı bırakıp kendi fonksiyonunuzu kullanmak mantıklı olabilir.
Schema Doğrulama ve Test
Kodu ekledikten sonra doğrulama yapmak şart. Bunun için şu araçları kullanabilirsiniz:
- Google Rich Results Test: search.google.com/test/rich-results adresine gidin, URL’nizi girin, schema’nızın doğru algılanıp algılanmadığını görün
- Schema Markup Validator: validator.schema.org adresinde schema kodunuzu direkt olarak test edebilirsiniz
- Google Search Console: Enhancements bölümünde sitemiz için schema verilerini görebilirsiniz
Test yaparken dikkat etmeniz gerekenler:
{search_term_string}placeholder’ı olduğu gibi kalmalı, encode edilmemeli@contextve@typeher zaman doğru yazılmalı- JSON-LD bloğu sayfa
bölümünde olmalı - URL’ler canonical URL’lerle eşleşmeli
Yaygın Hatalar ve Çözümleri
Sysadmin olarak bu tür işlerde karşılaştığım tipik hataları paylaşayım:
HTML karakterleri encode edilmiş şekilde çıkıyor: wp_json_encode kullanırken JSON_UNESCAPED_UNICODE flag’ini eklediğinizden emin olun, aksi halde Türkçe karakterler bozulur.
Searchbox görünmüyor: Google bu özelliği her sitede göstermiyor. Sitenizin yeterli domain authority’ye sahip olması gerekiyor. Yeni siteler için birkaç ay beklemek gerekebilir.
Schema iki kez çıkıyor: Hem plugin hem de functions.php’nizde schema varsa bu olur. Yukarıdaki plugin kontrolü kodunu kullanın.
Arama URL’si çalışmıyor: WooCommerce’de normal WordPress araması devre dışı bırakılmış olabilir. Search URL’nizi manuel test edin, ?s=test yazarak kontrol edin.
Performans Notu
Schema kodu küçük bir JSON bloğu olduğu için performansa etkisi neredeyse sıfır. Ancak yine de şu iyileştirmeleri yapabilirsiniz:
- Output’u WordPress transient ile önbelleğe alın
- Mümkünse PHP array yerine statik string kullanın (site adı hiç değişmeyecekse)
- Cache plugin kullanıyorsanız, schema’nın cache’lenmiş versiyonunda da doğru çıktığını doğrulayın
Sonuç
WebSite Schema ve Sitelinks Searchbox, görece küçük bir teknik çalışmayla ciddi SEO kazanımları sağlayan özellikler. functions.php üzerinden 20-30 satır kodla halledebileceğiniz bu işi yapmamak için gerçekten bir nedeniniz olmamalı.
Yapmanız gerekenler özetlenecek olursa: önce mevcut SEO plugin’inizin WebSite schema ekleyip eklemediğini kontrol edin, yoksa yukarıdaki kodlardan sitenize uygun olanı seçin, ana sayfaya ekleyin, Google Rich Results Test ile doğrulayın ve Google Search Console’dan birkaç hafta içinde Enhanced Search Results raporunu takip edin.
WooCommerce siteleri için özellikle ürün araması üzerine kurgulanmış search URL’sini kullanmayı öneririm, kullanıcı deneyimi açısından daha anlamlı. Arama sonucu olarak direkt ürün listeleri çıktığında dönüşüm oranları da olumlu etkileniyor.
Bu kodu production ortamına almadan önce mutlaka bir staging ortamında test edin ve Google’ın herhangi bir hata vermediğinden emin olun. Schema hataları direkt sıralama cezası getirmez ama yanlış schema işe yaramaz ve emek boşa gider.
