🇬🇧 English: Read this in English →

SEO’nun büyük bir kısmı tekrardır, açık konuşayım — ve tekrar, insanın en çabuk sıkıldığı, en çok hata yaptığı yerdir. 500 sayfa için meta açıklaması yazmak, binlerce yazı arasında iç bağlantıları denetlemek, her ürün için schema markup üretmek: bunlar kalıp takip eden işler, yani AI’nin gerçekten işe yaradığı türden işler. Bu yazıda sana bugün neyi otomatikleştirebileceğini, hangi kod parçasıyla ve nerede insanı devrede tutman gerektiğini göstereceğim. Baştan söyleyeyim: amaç SEO’cuyu kovmak değil, onu kopyala-yapıştır angaryasından kurtarıp asıl kafa isteyen işe döndürmek.

AI’nin SEO’da Otomatikleştirebileceği Görevler

Görev Otomasyon Seviyesi ROI
Meta açıklamaları %90 (insan incelemesi gerekli) Çok Yüksek
Görseller için alt metin %85 Yüksek
Schema markup oluşturma %80 Yüksek
İç bağlantı önerileri %75 Yüksek
İçerik boşluğu analizi %70 Orta
Anahtar kelime kümelemesi %90 Orta
Başlık etiketi optimizasyonu %60 (marka sesi önemli) Yüksek
İçerik brifleri %70 Orta

1. Otomatik Meta Açıklamaları

En yüksek ROI’li otomasyon burası, gözün kapalı buradan başla. Çoğu WordPress sitesinde eksik ya da birbirinin kopyası genel meta açıklamalara sahip yüzlerce sayfa bulunur; ve bunlar tam olarak AI’nin bir insandan daha yorulmadan, daha tutarlı ürettiği metinler.

// WP-CLI command to batch-generate meta descriptions

// Run: wp ai-seo generate-meta --post-type=product --batch=50

class AI_SEO_CLI {

public function generate_meta($args, $assoc_args) {

$post_type = $assoc_args['post-type'] ?? 'post';

$batch_size = intval($assoc_args['batch'] ?? 25);

// Get posts without meta descriptions

$posts = get_posts([

'post_type' => $post_type,

'posts_per_page' => $batch_size,

'meta_query' => [[

'relation' => 'OR',

['key' => '_yoast_wpseo_metadesc', 'compare' => 'NOT EXISTS'],

['key' => '_yoast_wpseo_metadesc', 'value' => '']

]]

]);

WP_CLI::log("Found " . count($posts) . " posts without meta descriptions");

foreach ($posts as $post) {

$content = wp_strip_all_tags($post->post_content);

$content = substr($content, 0, 2000);

$meta = $this->generate_with_claude($post->post_title, $content, $post_type);

if ($meta) {

update_post_meta($post->ID, '_yoast_wpseo_metadesc', $meta);

WP_CLI::success("{$post->post_title}: {$meta}");

} else {

WP_CLI::warning("Failed for: {$post->post_title}");

}

usleep(500000); // Rate limiting: 2 requests/second

}

}

private function generate_with_claude($title, $content, $type) {

$prompt = "Write a meta description for this {$type}.\n";

$prompt .= "Title: {$title}\n";

$prompt .= "Content: {$content}\n\n";

$prompt .= "Rules: 150-160 characters, include main keyword, action-oriented.";

// Claude API call

return claude_api_request($prompt, 'Return ONLY the meta description.');

}

}

2. Otomatik Görsel Alt Metni

Medya kütüphaneni tara, alt metni olmayan görselleri bul ve açıklamaları üret. Erişilebilirlik açısından da önemli bu — alt metni boş bırakmak sadece SEO değil, ekran okuyucu kullanan ziyaretçiye kapı kapatmak demek:

function auto_generate_alt_text() {

global $wpdb;

// Find images without alt text

$images = $wpdb->get_results("

SELECT p.ID, p.guid

FROM {$wpdb->posts} p

LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = '_wp_attachment_image_alt'

WHERE p.post_type = 'attachment'

AND p.post_mime_type LIKE 'image/%'

AND (pm.meta_value IS NULL OR pm.meta_value = '')

LIMIT 50

");

foreach ($images as $image) {

$image_url = wp_get_attachment_url($image->ID);

// Use Claude's vision capability

$alt_text = claude_vision_request($image_url,

"Describe this image for a product listing alt text. Be concise (10-15 words), descriptive, and include the product type."

);

if ($alt_text) {

update_post_meta($image->ID, '_wp_attachment_image_alt', sanitize_text_field($alt_text));

}

}

}

3. AI Destekli İç Bağlantılama

İç bağlantılar SEO altınıdır, ama yüzlerce yazı arasında elle yönetmek insanın harcı değil. Burada AI’yi otomatik ekleyici olarak değil, öneri motoru olarak kullanıyorum; kararı hâlâ sen veriyorsun:

async function suggestInternalLinks(postId) {

const post = await wp.getPost(postId);

const allPosts = await wp.getPosts({ per_page: 100, exclude: [postId] });

// Generate embeddings for the current post

const postEmbedding = await generateEmbedding(post.content);

// Find semantically similar posts

const similar = allPosts

.map(p => ({

id: p.id,

title: p.title,

url: p.link,

similarity: cosineSimilarity(postEmbedding, p.embedding)

}))

.filter(p => p.similarity > 0.7)

.sort((a, b) => b.similarity - a.similarity)

.slice(0, 5);

// Find anchor text opportunities in the content

const suggestions = [];

for (const match of similar) {

const anchorText = await claude.messages.create({

model: 'claude-haiku-4-5-20251001',

max_tokens: 50,

messages: [{

role: 'user',

content: Find a natural phrase in this text that could link to an article titled "${match.title}". Return ONLY the exact phrase from the text, nothing else.\n\nText: ${post.content.substring(0, 1000)}

}]

});

suggestions.push({

targetPost: match,

anchorText: anchorText.content[0].text,

position: post.content.indexOf(anchorText.content[0].text)

});

}

return suggestions;

}

4. Schema Markup Oluşturma

AI, sayfa içeriğini analiz edip uygun schema markup üretebilir — ama üretilen JSON-LD’yi körlemesine yayına koyma, doğrula. Aşağıdaki kod bunu bir adım olarak zaten içeriyor:

async function generateSchema(post) {

const response = await anthropic.messages.create({

model: 'claude-sonnet-4-20250514',

max_tokens: 1000,

system: You are a schema.org expert. Analyze the content and return valid JSON-LD schema markup. Choose the most appropriate schema type (Article, Product, HowTo, FAQ, etc.) based on the content structure. Return ONLY valid JSON-LD, no explanation.,

messages: [{

role: 'user',

content: Title: ${post.title}\nURL: ${post.url}\nContent: ${post.content.substring(0, 3000)}

}]

});

const schema = JSON.parse(response.content[0].text);

// Validate schema

if (schema['@context'] === 'https://schema.org') {

return schema;

}

return null;

}

5. İçerik Boşluğu Analizi

Rakiplerinin kapsadığı ama senin kaçırdığın konuları bulmak için AI kullan. Burada AI sana bir liste verir; hangi boşluğun senin markana değdiğine yine sen karar verirsin:

async function analyzeContentGaps(sitemap, competitorSitemaps) {

// Extract topics from your content

const yourTopics = await extractTopics(sitemap);

// Extract topics from competitors

const competitorTopics = [];

for (const cs of competitorSitemaps) {

competitorTopics.push(...await extractTopics(cs));

}

// Find gaps using Claude

const response = await anthropic.messages.create({

model: 'claude-sonnet-4-20250514',

max_tokens: 2000,

messages: [{

role: 'user',

content: Compare these topic lists and identify content gaps.

Your topics: ${yourTopics.join(', ')}

Competitor topics: ${competitorTopics.join(', ')}

Return a JSON array of topic suggestions with: title, keyword, estimated search volume (low/medium/high), difficulty (low/medium/high), and a brief content angle.

}]

});

return JSON.parse(response.content[0].text);

}

Uygulama Stratejisi

Her şeyi aynı anda otomatikleştirme. Ben olsam ROI’ye göre önceliklendirir, her adımda sistemin çıktısına güven biriktirdikçe bir sonrakine geçerdim:

  • 1-2. Hafta: Meta açıklaması olmayan tüm sayfalar için meta açıklamaları
  • 3-4. Hafta: Ürün görselleri için alt metin
  • 2. Ay: Ürünler ve makaleler için schema markup
  • 3. Ay: İç bağlantı önerileri
  • Sürekli: İçerik boşluğu analizi (aylık)

Kalite Güvencesi

AI’nin ürettiği her SEO öğesi bir kalite kontrol adımı ister — bu pazarlık konusu değil. Otomasyonun hızından utanma, ama çıktısını da denetimsiz bırakma:

  • Oluşturulan meta açıklamalarının %10’unu spot kontrol yaparak doğruluk kontrolü
  • Google’ın Rich Results Test ile schema doğrulama
  • Alt metnin genel olmadığını kontrol etme (“bir ürünün resmi”)
  • Otomatik ekleme öncesi iç bağlantı önerilerini gözden geçirme
  • Herhangi bir olumsuz etkiyi yakalamak için değişiklikler sonrası sıralamaları izleme

Ben neyi otomatikleştirmezdim

Şimdi işin diğer yüzü, çünkü “AI her şeyi yapsın” tavsiyesi sana pahalıya patlar. Ben olsam üç şeyi otomasyonun eline tam bırakmazdım. Birincisi, marka sesinin ağır bastığı yerler — başlık etiketleri ve öne çıkan ürünlerin açıklamaları. Tablodaki %60 rakamı boşuna değil; markanın tonu, robotun ortalama “iyi” cümlesinden farklıdır ve o fark satar. İkincisi, YMYL sayfaları — sağlık, finans, hukuk gibi yanlış bir cümlenin gerçek zarar verdiği konular. Orada AI taslak yazsın, ama son sözü konuyu bilen insan söylesin. Üçüncüsü, iç bağlantının otomatik eklenmesi; öneriyi AI üretsin, ama linki koymadan önce bir insan “bu bağlam gerçekten uyuyor mu” diye baksın. Yanlış yere konmuş bir iç bağlantı, hiç olmayandan daha kötüdür.

Bunu neden bu kadar vurguluyorum? Çünkü otomasyonun en tatlı geldiği an, en tehlikeli olduğu andır. Sistem yüzlerce sayfayı sorunsuz işleyince insan denetimi gevşer, ve bir gün fark edersin ki üç ay boyunca yanlış bir kalıp beş yüz sayfaya sessizce yayılmış. Bir hatayı elle yaptığında bir sayfayı bozarsın; otomatikleştirilmiş bir hatayı tüm siteye dağıtırsın. O yüzden spot kontrol oranını, siteye yayıldıkça düşürmek yerine sabit tutardım.

Sonuç

AI otomatik SEO, SEO stratejini değiştirmekle ilgili değil — bir SEO ekibinin zamanının %80’ini yiyen tekrarlayıcı uygulama işlerini ortadan kaldırmakla ilgili. Meta açıklamaları, alt metin ve schema markup ideal otomasyon adaylarıdır çünkü net kuralları ve kalıpları takip ederler. İç bağlantılama ve içerik boşluğu analizi daha fazla insan değerlendirmesi ister ama AI destekli önerilerden fazlasıyla faydalanır. En yüksek ROI’li, en düşük riskli otomasyonlarla başla; çıktı kalitesine güvenin arttıkça genişlet. Robotu koştur, ama dizginini elinde tut.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Close Search Window