Takip et

Feed Kurtarma: Ham Ulta Verilerini Google Merchant Center XML’ine Dönüştürme

Örnek: Fiyat Verisi Temizliği (Python)

Feed Kurtarma: Ham Ulta Verilerini Google Merchant Center XML’ine Dönüştürme

E-ticaret dünyasında ürünlerinizi doğru kitleye ulaştırmanın en etkili yollarından biri Google Alışveriş reklamlarıdır. Ancak bu reklamların temelini oluşturan ürün feed’lerinin kalitesi, kampanya başarınızı doğrudan etkiler. Özellikle Ulta gibi büyük ve dinamik bir e-ticaret sitesinden çekilen ham veriler, genellikle Google Merchant Center (GMC) gereksinimlerini karşılamaktan uzaktır. Bu teknik makale, ham Ulta verilerini temizleyerek, standartlaştırarak ve zenginleştirerek Google Merchant Center’a uygun, hatasız bir XML feed’ine nasıl dönüştüreceğinizi adım adım açıklayacaktır. Bu süreç, “Feed Kurtarma” olarak adlandırılır ve reklam performansınızı maksimize etmek için kritik öneme sahiptir.

Giriş: Ham Veri Sorunsalı ve Feed Kurtarmanın Önemi

Ulta gibi dinamik ve sürekli güncellenen e-ticaret sitelerinden veri çekmek (scraping), pazarlamacılar ve veri analistleri için cazip bir kaynaktır. Ancak bu veriler genellikle ham, yapısal olmayan ve tutarsız bir formatta gelir. Ürün başlıkları eksik olabilir, fiyat bilgileri metin içinde gömülü olabilir, stok durumu net olmayabilir veya görsel URL’leri geçersiz çıkabilir. Bu tür “ham veri” sorunları, Google Merchant Center gibi platformlara doğrudan yüklenemez ve bir dizi dönüşüm sürecinden geçirilmesi gerekir. İşte bu noktada “Feed Kurtarma” devreye girer.

Ulta Verilerinin Özellikleri

Ulta’nın web sitesi, kullanıcı deneyimini zenginleştirmek için dinamik içerik yükleme, JavaScript tabanlı etkileşimler ve bazen karmaşık HTML yapıları kullanır. Bu durum, otomatik veri çekme (scraping) süreçlerini zorlaştırabilir. Çekilen veriler genellikle aşağıdaki sorunları barındırır:

  • Tutarsız HTML Yapıları: Farklı ürün sayfalarında aynı bilgi için farklı etiketler veya sınıflar kullanılabilir.
  • Dinamik Yüklenen İçerik: Fiyat, stok durumu gibi kritik bilgiler sayfa yüklendikten sonra JavaScript ile getirilebilir, bu da basit HTTP istekleriyle çekilemez.
  • Eksik veya Yanlış Bilgiler: Bazı ürünlerin GTIN’i (Global Ticari Ürün Numarası) olmayabilir, açıklamalar yetersiz kalabilir veya görsellerin çözünürlüğü düşük olabilir.
  • Metinsel Fiyatlar: Fiyatlar “24.99 $” gibi string formatında olabilir ve sayısal işleme uygun olmayabilir.

Neden Feed Kurtarma?

Kaliteli bir ürün feed’i, Google Alışveriş reklamlarının temelidir. İyi optimize edilmiş bir feed, ürünlerinizin doğru aramalarda görünmesini sağlar, tıklama oranlarını (CTR) artırır ve dönüşüm oranlarını yükseltir. Feed kurtarma süreci, bu ham veriyi işleyerek pazarlama hedeflerinize ulaşmanızı sağlayan temiz, yapılandırılmış ve optimize edilmiş bir feed’e dönüştürür. Aksi takdirde, eksik veya hatalı verilerle oluşturulan feed’ler, Google tarafından reddedilir veya düşük performans gösterir.

Google Merchant Center ve Feed Kalitesi

Google Merchant Center, ürün feed’leri için katı kurallar ve gereksinimler belirlemiştir. Bu kurallara uyulmaması, ürünlerinizin onaylanmamasına, reklamlarınızın yayınlanmamasına veya hesabınızın askıya alınmasına yol açabilir. Feed kurtarma, bu gereksinimleri karşılamak ve potansiyel reddedilme nedenlerini ortadan kaldırmak için zorunludur. Kaliteli bir feed, aynı zamanda Google’ın ürünlerinizi daha iyi anlamasına ve ilgili aramalarda göstermesine yardımcı olur.

Veri Toplama ve İlk Temizlik Adımları

Feed kurtarma sürecinin ilk adımı, ham veriyi toplamak ve ön temizliğini yapmaktır. Bu aşama, sonraki adımların başarısı için kritik bir temel oluşturur.

Scraping Yöntemleri ve Araçları

Ulta gibi bir siteden veri çekmek için çeşitli yöntemler ve araçlar mevcuttur:

  • Python Kütüphaneleri:
    • Scrapy: Büyük ölçekli, asenkron scraping projeleri için güçlü bir framework.
    • BeautifulSoup ve Requests: Daha küçük ölçekli projeler veya belirli sayfaları çekmek için ideal, kullanımı kolay kütüphaneler.
    • Selenium veya Playwright: JavaScript ile dinamik olarak yüklenen içerikleri çekmek için bir web tarayıcısını simüle eden araçlar.
  • Node.js Kütüphaneleri: Puppeteer veya Cheerio, JavaScript tabanlı sitelerden veri çekmek için popüler seçeneklerdir.
  • Ticari Scraping Araçları: Bright Data, Scrape.it gibi platformlar, proxy yönetimi ve ölçeklenebilirlik gibi avantajlar sunar.

Hangi yöntemin seçileceği, projenin ölçeğine, bütçeye ve teknik bilgi birikimine bağlıdır. Dinamik içerik nedeniyle genellikle Selenium veya Puppeteer gibi tarayıcı otomasyon araçları tercih edilir.

Ham Verinin Yapısı

Scraping işlemi sonucunda elde edilen ham veri genellikle JSON, CSV veya direkt HTML çıktısı şeklinde olabilir. Bu veriler, genellikle ana ürün bilgileri (başlık, fiyat, açıklama, görsel URL’si), SKU, marka ve kategori gibi temel alanları içerir. Ancak bu alanlar, yukarıda belirtildiği gibi tutarsız veya eksik olabilir.

Temel Veri Temizliği

Ham veriyi topladıktan sonra, ilk temizlik adımları uygulanmalıdır. Bu adımlar, veriyi daha işlenebilir hale getirir:

  1. Boş Değerleri Doldurma: Eksik description veya brand alanları için varsayılan değerler atama veya diğer kaynaklardan tamamlama.
  2. Gereksiz Karakterleri Kaldırma: Fiyatlardan para birimi sembollerini, başlık ve açıklamalardan HTML etiketlerini veya özel karakterleri temizleme.
  3. Veri Tiplerini Düzeltme: Fiyat string’lerini float’a, stok durumunu boolean’a veya belirli bir string formatına dönüştürme.
  4. URL Doğrulama: Görsel ve ürün linklerinin geçerli ve erişilebilir olup olmadığını kontrol etme.

Örnek: Fiyat Verisi Temizliği (Python)


import re

def clean_price(price_str):
    if not price_str:
        return None
    # Para birimi sembollerini, virgülleri kaldır ve noktaya dönüştür
    cleaned = re.sub(r'[^\d.,]+', '', price_str).replace(',', '.')
    try:
        return float(cleaned)
    except ValueError:
        return None

# Kullanım örneği
raw_price = "$24.99 USD"
cleaned_price = clean_price(raw_price) # Sonuç: 24.99

raw_price_turkish = "₺129,90"
cleaned_price_turkish = clean_price(raw_price_turkish) # Sonuç: 129.90

Veri Standardizasyonu ve Zenginleştirme

Temel temizlikten sonra, veriyi Google Merchant Center'ın beklentilerine uygun hale getirmek ve reklam performansını artırmak için standardizasyon ve zenginleştirme adımları gelir.

Ürün Başlıklarını Optimize Etme

GMC'de ürün başlıkları, ürününüzün aramalarda görünmesi için en önemli faktörlerden biridir. Ham başlıklara genellikle marka, model, renk, boyut gibi kritik bilgiler eksik olabilir. Başlıklar, kullanıcıların arama sorgularına uygun olacak şekilde yeniden düzenlenmelidir.

Örnek Başlık Optimizasyonu:

  • Ham Başlık: "Ruj"
  • Optimize Edilmiş Başlık: "MAC Ruby Woo Mat Ruj - Kırmızı, 3g"

Optimal başlık formatı genellikle: [Marka] [Ürün Adı] [Anahtar Özellik 1] [Anahtar Özellik 2] şeklindedir.

Açıklamaları Zenginleştirme

Ürün açıklamaları, ürününüz hakkında daha fazla bilgi sağlar ve potansiyel müşterilerin satın alma kararını etkiler. Açıklamalar, ürünün faydalarını, temel özelliklerini ve anahtar kelimeleri içermelidir. HTML etiketlerinden arındırılmış, okunaklı ve bilgilendirici olmalıdır.

Kategori Eşleştirme

Ulta'nın kendi iç kategori yapısı, Google'ın standart ürün kategorileriyle (Google Product Categories - GPC) genellikle uyuşmaz. Ürünlerinizin doğru kategoride listelenmesi için Ulta kategorilerini GPC'ye eşleştirmek zorunludur. Bu, manuel olarak veya bir eşleştirme tablosu oluşturarak yapılabilir.

Örnek Kategori Eşleştirme Tablosu:

Ulta Kategori Google Ürün Kategorisi (GPC)
Makyaj > Dudaklar > Rujlar Giyim ve Aksesuarlar > Kozmetik > Makyaj > Dudak Makyajı > Rujlar
Cilt Bakımı > Nemlendiriciler Sağlık ve Güzellik > Kişisel Bakım > Cilt Bakımı > Nemlendiriciler
Saç Bakımı > Şampuanlar Sağlık ve Güzellik > Kişisel Bakım > Saç Bakımı > Şampuanlar

Görsel URL'leri ve Stok Durumu

Görsel URL'lerinin geçerli, erişilebilir ve yüksek çözünürlüklü olması gerekir. Ayrıca, ürünlerin stok durumunun (in stock, out of stock, preorder) doğru bir şekilde belirtilmesi, Google'ın reklamları doğru zamanda göstermesi için önemlidir. Stok durumu bilgisi genellikle anlık olarak çekilmeli veya düzenli olarak güncellenmelidir.

Google Merchant Center Gereksinimlerini Anlama

Google Merchant Center, ürün feed'leri için belirli alanları zorunlu kılar ve bazılarını da önerir. Bu gereksinimleri tam olarak anlamak, feed'inizin onaylanması için hayati öneme sahiptir.

Zorunlu Alanlar

Her ürün için aşağıdaki alanlar kesinlikle sağlanmalıdır:

  • id: Her ürün için benzersiz bir kimlik.
  • title: Ürün başlığı (optimize edilmiş hali).
  • description: Ürün açıklaması (zenginleştirilmiş hali).
  • link: Ürünün Ulta'daki doğrudan URL'si.
  • image_link: Ana ürün görselinin URL'si.
  • price: Ürünün güncel fiyatı (örn: "24.99 USD").
  • availability: Stok durumu (in stock, out of stock, preorder).
  • brand: Ürünün markası.
  • gtin: Global Ticari Ürün Numarası (UPC, EAN, ISBN, JAN) veya mpn (Üretici Parça Numarası) ve brand kombinasyonu. Özel ürünler için identifier_exists alanı false olarak ayarlanabilir.
  • condition: Ürünün durumu (new, refurbished, used).

Önerilen Alanlar

Bu alanlar zorunlu olmasa da, ürünlerinizin performansını artırmak ve daha spesifik aramalarda görünmesini sağlamak için şiddetle tavsiye edilir:

  • google_product_category: Google Ürün Kategorisi.
  • product_type: Kendi iç kategori yapınız.
  • item_group_id: Varyant ürünleri (farklı renk, boyut) gruplamak için.
  • color, size, material, pattern: Ürün özelliklerini detaylandırmak için.
  • shipping, tax: Gönderim ve vergi bilgileri.
  • custom_label_0, custom_label_1, vb.: Özel etiketler, kampanya yönetimi için esneklik sağlar.

Veri Formatı Kuralları

GMC, her alan için belirli format kuralları belirler. Örneğin, fiyatlar sayısal bir değer ve para birimi koduyla (örn: "24.99 USD") belirtilmelidir. URL'ler geçerli olmalı ve HTTP/HTTPS protokolünü kullanmalıdır. Başlıklar ve açıklamalar belirli karakter limitlerine sahip olabilir. Bu kurallara uymak, feed'inizin sorunsuz bir şekilde işlenmesini sağlar.

XML Yapılandırması ve Dönüşüm Süreci

Tüm veriler temizlenip standartlaştırıldıktan sonra, sıra bu veriyi Google Merchant Center'ın kabul ettiği XML formatına dönüştürmeye gelir. GMC, Atom 1.0 veya RSS 2.0 tabanlı XML şemalarını destekler.

XML Şeması

Google Alışveriş feed'leri için genellikle Atom 1.0 şeması kullanılır. Bu şema, ürün bilgilerini belirli etiketler altında yapılandırır ve Google'ın özel uzantılarını (g: öneki ile belirtilenler) kullanır.

XML Oluşturma Adımları

  1. Kök Element ve Namespace Tanımları: XML dosyasının başında veya kök elementi ve gerekli namespace (ad alanı) tanımları yer alır. Google'ın özel etiketleri için xmlns:g="http://base.google.com/ns/1.0" ad alanı eklenmelidir.
  2. Kanal Bilgileri: Feed'in genel bilgilerini içeren </code>, <code><link></code>, <code><description></code> gibi etiketler eklenir.</li> <li><strong>Her Ürün İçin <code><entry></code> veya <code><item></code> Elementleri:</strong> Her bir ürün, <code><feed></code> içinde bir <code><entry></code> (Atom için) veya <code><rss></code> içinde bir <code><item></code> (RSS için) elementi olarak temsil edilir.</li> <li><strong>GMC Alanlarını Ekleme:</strong> Her <code><entry></code> veya <code><item></code> içine, daha önce hazırladığınız tüm zorunlu ve önerilen GMC alanları, <code>g:</code> önekiyle (örn: <code><g:id></code>, <code><g:title></code>) eklenir.</li> </ol> <p><strong>Python ile XML Oluşturma Örneği (lxml kütüphanesi ile):</strong></p> <pre><code class="language-python"> from lxml import etree def create_gmc_xml(products_data): # Google Merchant Center namespace ns_g = "http://base.google.com/ns/1.0" # Atom 1.0 namespace ns_atom = "http://www.w3.org/2005/Atom" # Kök elementi oluştur root = etree.Element("feed", nsmap={'g': ns_g, None: ns_atom}) # Feed genel bilgilerini ekle title = etree.SubElement(root, "title") title.text = "Ulta Ürün Feed'i" link = etree.SubElement(root, "link", href="https://www.example.com", rel="self") updated = etree.SubElement(root, "updated") updated.text = "2023-10-27T10:00:00Z" # Son güncelleme tarihi for product in products_data: entry = etree.SubElement(root, "entry") # Zorunlu alanlar etree.SubElement(entry, f"{{{ns_g}}}id").text = str(product['id']) etree.SubElement(entry, f"{{{ns_g}}}title").text = product['title'] etree.SubElement(entry, f"{{{ns_g}}}description").text = product['description'] etree.SubElement(entry, f"{{{ns_g}}}link").text = product['link'] etree.SubElement(entry, f"{{{ns_g}}}image_link").text = product['image_link'] etree.SubElement(entry, f"{{{ns_g}}}price").text = f"{product['price']:.2f} USD" etree.SubElement(entry, f"{{{ns_g}}}availability").text = product['availability'] etree.SubElement(entry, f"{{{ns_g}}}brand").text = product['brand'] etree.SubElement(entry, f"{{{ns_g}}}condition").text = product['condition'] # GTIN veya MPN/brand if 'gtin' in product and product['gtin']: etree.SubElement(entry, f"{{{ns_g}}}gtin").text = product['gtin'] elif 'mpn' in product and product['mpn'] and 'brand' in product and product['brand']: etree.SubElement(entry, f"{{{ns_g}}}mpn").text = product['mpn'] # Brand zaten eklenmişti else: etree.SubElement(entry, f"{{{ns_g}}}identifier_exists").text = "false" # Önerilen alanlar (örnek) if 'google_product_category' in product and product['google_product_category']: etree.SubElement(entry, f"{{{ns_g}}}google_product_category").text = product['google_product_category'] if 'color' in product and product['color']: etree.SubElement(entry, f"{{{ns_g}}}color").text = product['color'] # Diğer alanlar da benzer şekilde eklenebilir # XML'i string olarak döndür return etree.tostring(root, pretty_print=True, encoding='utf-8', xml_declaration=True).decode() # Örnek kullanım (gerçek verilerle değiştirilmeli) # products = [ # { # 'id': 12345, # 'title': 'MAC Ruby Woo Mat Ruj - Kırmızı, 3g', # 'description': 'MAC Cosmetics\'in ikonik Ruby Woo mat rujunu keşfedin. Yoğun pigmentli, uzun süre kalıcı formül.', # 'link': 'https://www.ulta.com/ruby-woo-matte-lipstick', # 'image_link': 'https://www.ulta.com/images/ruby-woo.jpg', # 'price': 24.00, # 'availability': 'in stock', # 'brand': 'MAC Cosmetics', # 'condition': 'new', # 'gtin': '773602061030', # 'google_product_category': 'Giyim ve Aksesuarlar > Kozmetik > Makyaj > Dudak Makyajı > Rujlar', # 'color': 'Kırmızı' # } # ] # xml_output = create_gmc_xml(products) # print(xml_output) </pre> <p></code></p> <h3>Doğrulama, Hata Ayıklama ve Optimizasyon</h3> <p>XML feed'i oluşturulduktan sonra, Google Merchant Center'a yüklemeden önce ve yükledikten sonra dikkatlice doğrulanmalı ve hatalar ayıklanmalıdır.</p> <h4>GMC Feed Tanılama</h4> <p>Google Merchant Center, yüklediğiniz feed'i otomatik olarak tarar ve "Teşhis" bölümünde detaylı bir rapor sunar. Bu rapor, feed'inizdeki hataları, uyarıları ve iyileştirme fırsatlarını gösterir.</p> <ul> <li><strong>Hatalar:</strong> Ürünlerin onaylanmasını engelleyen kritik sorunlardır (örn: eksik zorunlu alanlar, geçersiz fiyat formatı).</li> <li><strong>Uyarılar:</strong> Ürünler onaylansa da performansını etkileyebilecek veya gelecekte hataya dönüşebilecek sorunlardır (örn: düşük çözünürlüklü görsel, eksik önerilen alan).</li> <li><strong>Fırsatlar:</strong> Feed'i daha da optimize etmek için önerilerdir.</li> </ul> <h4>Hata Türleri ve Çözümleri</h4> <ul> <li><strong>Eksik Alanlar:</strong> En yaygın hatalardan biridir. Hangi alanların eksik olduğunu belirleyin ve veri çekme veya temizleme aşamalarını kontrol ederek bu bilgileri ekleyin.</li> <li><strong>Geçersiz Değerler:</strong> Fiyat formatı, URL geçerliliği, stok durumu metni gibi değerlerin GMC kurallarına uygun olduğundan emin olun.</li> <li><strong>Görsel Hataları:</strong> Görsel URL'lerinin erişilebilir, doğru formatta ve minimum boyut gereksinimlerini karşıladığından emin olun.</li> <li><strong>GTIN Sorunları:</strong> GTIN'ler benzersiz olmalı ve doğru formatta girilmelidir. Eğer GTIN yoksa, <code>mpn</code> ve <code>brand</code> kullanın veya <code>identifier_exists</code> alanını <code>false</code> olarak ayarlayın.</li> <li><strong>Kategori Eşleştirme Hataları:</strong> Google Ürün Kategorileri'nin doğru ve en spesifik seviyede eşleştiğinden emin olun.</li> </ul> <h4>Performans Optimizasyonu</h4> <p>Feed'i yalnızca hatasız hale getirmek yeterli değildir; aynı zamanda performansını da optimize etmelisiniz:</p> <ul> <li><strong>Başlık ve Açıklama Optimizasyonu:</strong> Anahtar kelimeleri ve ürünün en çekici özelliklerini içeren başlıklar ve açıklamalar kullanın.</li> <li><strong>Özel Etiketler (Custom Labels):</strong> Kampanya yönetimi için özel etiketler oluşturun. Örneğin, "yeni gelenler", "çok satanlar", "indirimli ürünler" gibi etiketlerle ürün grupları oluşturabilirsiniz.</li> <li><strong>Promosyonlar:</strong> Fiyat indirimleri veya özel teklifler için promosyon feed'lerini kullanın.</li> </ul> <h4>A/B Testleri</h4> <p>Farklı başlık formatları, açıklamalar veya görsellerin performansını ölçmek için A/B testleri yapabilirsiniz. Bu, hangi elementlerin daha yüksek tıklama ve dönüşüm oranları sağladığını anlamanıza yardımcı olur.</p> <h3>Sürekli Bakım ve Otomasyon</h3> <p>Feed kurtarma tek seferlik bir işlem değildir. Ürün bilgilerinin sürekli güncel kalması ve feed'in hatasız çalışması için düzenli bakım ve otomasyon şarttır.</p> <h4>Periyodik Gün</p> </div> <div class="cs-entry__footer"> <div class="cs-entry__footer-left"> <div class="cs-entry__post-meta" ><div class="cs-meta-author"><a class="cs-meta-author-link url fn n" href="https://fatihsoysal.com/blog/author/fatihsoysal/"><span class="cs-meta-author-by">by</span><span class="cs-meta-author-name">Fatih Soysal</span></a></div><div class="cs-meta-comments"><a href="https://fatihsoysal.com/blog/feed-kurtarma-ham-ulta-verilerini-google-merchant-center-xmline-donusturme/#respond" class="comments-link" >0</a></div></div> </div> <div class="cs-entry__footer-right"> <div class="cs-share"> <a class="cs-share__link" target="_blank" href="https://www.facebook.com/sharer.php?text=Feed%20Kurtarma%3A%20Ham%20Ulta%20Verilerini%20Google%20Merchant%20Center%20XML%E2%80%99ine%20D%C3%B6n%C3%BC%C5%9Ft%C3%BCrme&u=https://fatihsoysal.com/blog/feed-kurtarma-ham-ulta-verilerini-google-merchant-center-xmline-donusturme/"> <i class="cs-icon cs-icon-facebook"></i> </a> <a class="cs-share__link" target="_blank" href="https://twitter.com/share?t=Feed%20Kurtarma%3A%20Ham%20Ulta%20Verilerini%20Google%20Merchant%20Center%20XML%E2%80%99ine%20D%C3%B6n%C3%BC%C5%9Ft%C3%BCrme&url=https://fatihsoysal.com/blog/feed-kurtarma-ham-ulta-verilerini-google-merchant-center-xmline-donusturme/"> <i class="cs-icon cs-icon-twitter-x"></i> </a> <a class="cs-share__link" target="_blank" href="https://t.me/share/url?url=%5BURL%5D&text=https://fatihsoysal.com/blog/feed-kurtarma-ham-ulta-verilerini-google-merchant-center-xmline-donusturme/"> <i class="cs-icon cs-icon-telegram"></i> </a> <a class="cs-share__link cs-share__copy-link" target="_blank" href="https://fatihsoysal.com/blog/feed-kurtarma-ham-ulta-verilerini-google-merchant-center-xmline-donusturme/"> <i class="cs-icon cs-icon-link"></i> </a> </div> </div> </div> <div class="cs-entry__comments" id="comments"> <div class="cs-entry__comments-header"> <div class="cs-entry__comments-left"> <div class="cs-entry__comments-heading">Yorumlar</div> <div class="cs-entry__comments-description h2">İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.</div> </div> <div class="cs-entry__comments-right"> <div class="cs-entry__comments-toggle"> <span class="cs-button" role="button" aria-label="Yorumlar"> <span>Yorum Yaz</span> </span> </div> </div> </div> <div class="cs-entry__comments-inner"> <div id="respond" class="comment-respond"> <h2 id="reply-title" class="comment-reply-title">Bir yanıt yazın <small><a rel="nofollow" id="cancel-comment-reply-link" href="/blog/feed-kurtarma-ham-ulta-verilerini-google-merchant-center-xmline-donusturme/#respond" style="display:none;">Yanıtı iptal et</a></small></h2><form action="https://fatihsoysal.com/blog/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">E-posta adresiniz yayınlanmayacak.</span> <span class="required-field-message">Gerekli alanlar <span class="required">*</span> ile işaretlenmişlerdir</span></p><p class="comment-form-comment"><textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required" aria-required="true" placeholder="Your Comment *"></textarea></p><p class="comment-form-author"><input id="author" name="author" type="text" value="" size="30" aria-required='true' placeholder="Your Name *" /></p> <p class="comment-form-email"><input id="email" name="email" type="email" value="" size="30" aria-required='true' placeholder="Your E-mail *" /></p> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"><label for="wp-comment-cookies-consent">Save my name and email in this browser for the next time I comment.</label></p> <p class="form-submit"><button name="submit" type="submit" id="submit" class="submit" value="Yorum gönder" />Gönder </button> <input type='hidden' name='comment_post_ID' value='40631' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="701dd3f65f" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="6"/><script> document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() ); </script> </p></form> </div><!-- #respond --> </div> </div> </div> </div> </div> </div> </div> <section class="cs-read-next"> <h2 class="cs-read-next__heading"> Aşağıdaki içerikler de ilgilinizi çekebilir: </h2> <div class="cs-read-next__list cs-posts-area__archive"> <article class="cs-read-next__item post-40632 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/cve-2026-28280-osctrl-admin-on-demand-query-listteki-sakli-cross-site-scripting-xss-zafiyeti/">CVE-2026-28280: osctrl-admin On-Demand Query List’teki Saklı Cross-Site Scripting (XSS) Zafiyeti<div class="cs-entry__post-meta" ><div class="cs-meta-date">28 Şubat 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-40633 post type-post status-publish format-standard category-dusunsel-ve-kisisel category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/teknik-mulakatta-neden-bazen-sacmaliyoruz-anlamanin-ilk-adimi/">Teknik Mülakatta Neden Bazen Saçmalıyoruz? Anlamanın İlk Adımı<div class="cs-entry__post-meta" ><div class="cs-meta-date">28 Şubat 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-40660 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/gelistirici-olmanin-en-zor-kismi-kod-yazmak-degildir-sessizce-ortadan-kaybolmak/">Geliştirici Olmanın En Zor Kısmı Kod Yazmak Değildir: Sessizce Ortadan Kaybolmak<div class="cs-entry__post-meta" ><div class="cs-meta-date">28 Şubat 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-40663 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/hindistanin-ilk-kendi-hizinda-ogrenme-platformu-2-yil-5-kisi-1000-makale-ile-bir-basari-hikayesi/">Hindistan’ın İlk Kendi Hızında Öğrenme Platformu: 2 Yıl+, 5 Kişi, 1000+ Makale ile Bir Başarı Hikayesi<div class="cs-entry__post-meta" ><div class="cs-meta-date">28 Şubat 2026</div></div></a></h2> </div> </div> </div> </article> </div> </section> <div class="cs-subscribe"> <div class="cs-subscribe__content"> <div class="cs-subscribe__header"> <div class="cs-subscribe__heading h2"> E-posta Bülteni </div> <div class="cs-subscribe__subheading h2"> Yazılım Topluluğuna Katılın </div> <div class="cs-subscribe__description"> En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim. </div> </div> <form class="cs-subscribe__form" action="https://codesupply.us13.list-manage.com/subscribe/post?u=41845cb8908fb4302a4df512f&id=b5a5e9c757" method="post" target="_blank" novalidate> <div class="cs-form-group cs-subscribe__form-group"> <input type="email" placeholder="Your E-mail" name="EMAIL" required> <button type="submit" value="Abone Ol" aria-label="Abone Ol" name="subscribe"> <span>Abone Ol</span> </button> </div> </form> </div> </div> </div> </div> </main> </div> </div> <footer class="cs-footer" data-scheme="auto" data-l="light" data-d="dark"> <div class="cs-footer__item cs-footer__item-top-bar"> <div class="cs-container"> <div class="cs-footer__item-inner"> <div class="cs-footer__col cs-col-left"> <div class="cs-footer-columns__nav-menu"> <ul id="menu-menu-5" class="cs-footer-columns__nav "><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-19194 csco-menu-item-style-none"><a href="https://fatihsoysal.com/"><span>Anasayfa</span></a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-11 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog/hakkimda/"><span>Hakkımda</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25363 csco-menu-item-style-none"><a href="#"><span>Eğitimler</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-30019 csco-menu-item-style-none"><a href="#"><span>Makaleler</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-69 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog"><span>Blog</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-35075 csco-menu-item-style-none"><a href="#"><span>Kategoriler</span></a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-257 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog/iletisim/"><span>Bana Ulaşın</span></a></li> </ul> </div> </div> <div class="cs-footer__col cs-col-right"> <div class="cs-social"> <a class="cs-social__link" href="https://www.linkedin.com/in/fatihsoysal/" target="_blank" title="Linkedin"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M16.8169 2.00011H3.1831C3.02984 1.998 2.87767 2.02591 2.73526 2.08226C2.59286 2.13861 2.46302 2.22229 2.35316 2.32852C2.24329 2.43475 2.15556 2.56145 2.09496 2.70139C2.03437 2.84133 2.0021 2.99176 2 3.1441V16.8559C2.0021 17.0082 2.03437 17.1587 2.09496 17.2986C2.15556 17.4385 2.24329 17.5653 2.35316 17.6715C2.46302 17.7777 2.59286 17.8614 2.73526 17.9177C2.87767 17.9741 3.02984 18.002 3.1831 17.9999H16.8169C16.9702 18.002 17.1223 17.9741 17.2647 17.9177C17.4071 17.8614 17.537 17.7777 17.6468 17.6715C17.7567 17.5653 17.8444 17.4385 17.905 17.2986C17.9656 17.1587 17.9979 17.0082 18 16.8559V3.1441C17.9979 2.99176 17.9656 2.84133 17.905 2.70139C17.8444 2.56145 17.7567 2.43475 17.6468 2.32852C17.537 2.22229 17.4071 2.13861 17.2647 2.08226C17.1223 2.02591 16.9702 1.998 16.8169 2.00011ZM6.85312 15.3919H4.43863V8.19203H6.85312V15.3919ZM5.64588 7.18404C5.31289 7.18404 4.99354 7.05256 4.75808 6.81851C4.52262 6.58447 4.39034 6.26704 4.39034 5.93606C4.39034 5.60507 4.52262 5.28764 4.75808 5.0536C4.99354 4.81956 5.31289 4.68807 5.64588 4.68807C5.82269 4.66814 6.00175 4.68556 6.17133 4.73918C6.3409 4.7928 6.49717 4.88142 6.6299 4.99924C6.76264 5.11706 6.86883 5.26141 6.94155 5.42285C7.01426 5.58429 7.05185 5.75918 7.05185 5.93606C7.05185 6.11294 7.01426 6.28782 6.94155 6.44926C6.86883 6.6107 6.76264 6.75506 6.6299 6.87287C6.49717 6.99069 6.3409 7.07931 6.17133 7.13293C6.00175 7.18656 5.82269 7.20397 5.64588 7.18404ZM15.5614 15.3919H13.1469V11.528C13.1469 10.56 12.8008 9.928 11.9235 9.928C11.652 9.92998 11.3877 10.0146 11.1661 10.1705C10.9445 10.3264 10.7762 10.5461 10.6841 10.8C10.6211 10.988 10.5938 11.186 10.6036 11.384V15.3839H8.18913V8.18402H10.6036V9.20001C10.823 8.8217 11.142 8.51004 11.5263 8.29859C11.9106 8.08713 12.3457 7.98391 12.7847 8.00003C14.3944 8.00003 15.5614 9.03201 15.5614 11.248V15.3919Z"/></svg> </a> </div> </div> </div> </div> </div> <div class="cs-footer__item cs-footer__item-bottom-bar"> <div class="cs-container"> <div class="cs-footer__item-inner"> <div class="cs-footer__col cs-col-left"> <div class="cs-footer__nav-menu"> <ul id="menu-footer" class="cs-footer__nav "><li id="menu-item-39737" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39737"><a href="https://fatihsoysal.com/blog/category/ai/"><span>AI</span></a></li> <li id="menu-item-39739" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39739"><a href="https://fatihsoysal.com/blog/category/akademik-ve-bilimsel/"><span>Akademik ve Bilimsel</span></a></li> <li id="menu-item-39740" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39740"><a href="https://fatihsoysal.com/blog/category/angular/"><span>Angular</span></a></li> <li id="menu-item-39741" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39741"><a href="https://fatihsoysal.com/blog/category/aws/"><span>AWS</span></a></li> <li id="menu-item-39742" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39742"><a href="https://fatihsoysal.com/blog/category/azure/"><span>Azure</span></a></li> <li id="menu-item-39743" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39743"><a href="https://fatihsoysal.com/blog/category/bash/"><span>Bash</span></a></li> <li id="menu-item-39745" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39745"><a href="https://fatihsoysal.com/blog/category/c-2/"><span>C++</span></a></li> <li id="menu-item-39746" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39746"><a href="https://fatihsoysal.com/blog/category/cloud/"><span>Cloud</span></a></li> <li id="menu-item-39748" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39748"><a href="https://fatihsoysal.com/blog/category/devops/"><span>Devops</span></a></li> <li id="menu-item-39749" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39749"><a href="https://fatihsoysal.com/blog/category/docker/"><span>Docker</span></a></li> <li id="menu-item-39750" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39750"><a href="https://fatihsoysal.com/blog/category/dusunsel-ve-kisisel/"><span>Düşünsel ve Kişisel</span></a></li> <li id="menu-item-39751" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39751"><a href="https://fatihsoysal.com/blog/category/egitim/"><span>Eğitim</span></a></li> <li id="menu-item-39752" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39752"><a href="https://fatihsoysal.com/blog/category/flutter/"><span>Flutter</span></a></li> <li id="menu-item-39754" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-39754"><a href="https://fatihsoysal.com/blog/category/genel/"><span>Genel</span></a></li> <li id="menu-item-39755" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39755"><a href="https://fatihsoysal.com/blog/category/git/"><span>Git</span></a></li> <li id="menu-item-39758" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39758"><a href="https://fatihsoysal.com/blog/category/is-dunyasi/"><span>İş Dünyası</span></a></li> <li id="menu-item-39759" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39759"><a href="https://fatihsoysal.com/blog/category/java/"><span>Java</span></a></li> <li id="menu-item-39760" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39760"><a href="https://fatihsoysal.com/blog/category/kubernetes/"><span>Kubernetes</span></a></li> <li id="menu-item-39761" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39761"><a href="https://fatihsoysal.com/blog/category/mobile/"><span>Mobile</span></a></li> <li id="menu-item-39762" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39762"><a href="https://fatihsoysal.com/blog/category/mongodb/"><span>MongoDB</span></a></li> <li id="menu-item-39763" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39763"><a href="https://fatihsoysal.com/blog/category/mvc/"><span>MVC</span></a></li> <li id="menu-item-39764" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39764"><a href="https://fatihsoysal.com/blog/category/nextjs/"><span>NextJS</span></a></li> <li id="menu-item-39765" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39765"><a href="https://fatihsoysal.com/blog/category/nginx/"><span>Nginx</span></a></li> <li id="menu-item-39766" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39766"><a href="https://fatihsoysal.com/blog/category/powershell/"><span>PowerShell</span></a></li> <li id="menu-item-39767" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39767"><a href="https://fatihsoysal.com/blog/category/programming-patterns/"><span>Programming Patterns</span></a></li> <li id="menu-item-39768" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39768"><a href="https://fatihsoysal.com/blog/category/python/"><span>Python</span></a></li> <li id="menu-item-39769" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39769"><a href="https://fatihsoysal.com/blog/category/redis/"><span>Redis</span></a></li> <li id="menu-item-39770" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39770"><a href="https://fatihsoysal.com/blog/category/sed/"><span>Sed</span></a></li> <li id="menu-item-39771" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39771"><a href="https://fatihsoysal.com/blog/category/server/"><span>Server</span></a></li> <li id="menu-item-39772" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39772"><a href="https://fatihsoysal.com/blog/category/yazilim/net/"><span>.NET</span></a></li> <li id="menu-item-39773" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39773"><a href="https://fatihsoysal.com/blog/category/yazilim/ajax/"><span>AJAX</span></a></li> <li id="menu-item-39774" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39774"><a href="https://fatihsoysal.com/blog/category/yazilim/asp-net/"><span>ASP.NET</span></a></li> <li id="menu-item-39775" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39775"><a href="https://fatihsoysal.com/blog/category/yazilim/c/"><span>C#</span></a></li> <li id="menu-item-39776" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39776"><a href="https://fatihsoysal.com/blog/category/yazilim/css3-html5/"><span>CSS3 – HTML5</span></a></li> <li id="menu-item-39777" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39777"><a href="https://fatihsoysal.com/blog/category/yazilim/java-android-development/"><span>JAVA – Android</span></a></li> <li id="menu-item-39778" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39778"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/"><span>Javascript</span></a></li> <li id="menu-item-39779" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39779"><a href="https://fatihsoysal.com/blog/category/yazilim/linux/"><span>Linux</span></a></li> <li id="menu-item-39780" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39780"><a href="https://fatihsoysal.com/blog/category/yazilim/php/"><span>PHP</span></a></li> <li id="menu-item-39781" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39781"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/jquery/"><span>jQuery</span></a></li> <li id="menu-item-39782" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39782"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/node-js/"><span>Node.js</span></a></li> <li id="menu-item-39783" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39783"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/react/"><span>React</span></a></li> <li id="menu-item-39784" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39784"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/ms-sql-server/"><span>MS SQL Server</span></a></li> <li id="menu-item-39785" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39785"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/mysql/"><span>MySQL</span></a></li> <li id="menu-item-39786" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39786"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/postgresql/"><span>PostgreSQL</span></a></li> </ul> </div> </div> <div class="cs-footer__col cs-col-right"> <div class="cs-footer__copyright"> © 2026 Fatih Soysal 💻🚀 All rights reserved. Built with passion & caffeine ☕ </div> </div> </div> </div> </div> </footer> <button class="cs-scroll-top" role="button" aria-label="Scroll to top button"> <i class="cs-icon cs-icon-chevron-up"></i> <div class="cs-scroll-top-border"> <svg width="52" height="52" viewBox="0 0 52 52"> <path d="M26,2 a24,24 0 0,1 0,48 a24,24 0 0,1 0,-48" style="stroke-width: 2; fill: none;"></path> </svg> </div> <div class="cs-scroll-top-progress"> <svg width="52" height="52" viewBox="0 0 52 52"> <path d="M26,2 a24,24 0 0,1 0,48 a24,24 0 0,1 0,-48" style="stroke-width: 2; fill: none;"></path> </svg> </div> </button> <script type="text/javascript"> var CF7AppsLoadhCaptcha = function() { var hcaptcha = document.querySelectorAll( '.h-captcha' ); for (var i = 0; i < hcaptcha.length; i++) { hcaptcha[i].setAttribute( 'data-sitekey', '' ); hcaptcha[i].setAttribute( 'data-callback', 'cf7apps_hcaptcha_callback' ); } }; </script> <script src="https://js.hcaptcha.com/1/api.js?onload=CF7AppsLoadhCaptcha" async defer ></script> <script> const lazyloadRunObserver = () => { const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` ); const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => { entries.forEach( ( entry ) => { if ( entry.isIntersecting ) { let lazyloadBackground = entry.target; if( lazyloadBackground ) { lazyloadBackground.classList.add( 'e-lazyloaded' ); } lazyloadBackgroundObserver.unobserve( entry.target ); } }); }, { rootMargin: '200px 0px 200px 0px' } ); lazyloadBackgrounds.forEach( ( lazyloadBackground ) => { lazyloadBackgroundObserver.observe( lazyloadBackground ); } ); }; const events = [ 'DOMContentLoaded', 'elementor/lazyload/observe', ]; events.forEach( ( event ) => { document.addEventListener( event, lazyloadRunObserver ); } ); </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/embed-any-document/js/pdfobject.min.js?ver=2.7.12" id="awsm-ead-pdf-object-js"></script> <script id="awsm-ead-public-js-extra"> var eadPublic = []; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/embed-any-document/js/embed-public.min.js?ver=2.7.12" id="awsm-ead-public-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.1.5" id="swv-js"></script> <script id="contact-form-7-js-translations"> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "contact-form-7", {"translation-revision-date":"2026-01-19 21:19:08+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"tr"},"This contact form is placed in the wrong place.":["Bu ileti\u015fim formu yanl\u0131\u015f yere yerle\u015ftirilmi\u015f."],"Error:":["Hata:"]}},"comment":{"reference":"includes\/js\/index.js"}} ); </script> <script id="contact-form-7-js-before"> var wpcf7 = { "api": { "root": "https:\/\/fatihsoysal.com\/blog\/wp-json\/", "namespace": "contact-form-7\/v1" } }; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.1.5" id="contact-form-7-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/imagesloaded.min.js?ver=5.0.0" id="imagesloaded-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/sight/render/js/jquery.magnific-popup.min.js?ver=1777452259" id="magnific-popup-js"></script> <script id="sight-block-script-js-extra"> var sight_lightbox_localize = {"text_previous":"Previous","text_next":"Next","text_close":"Close","text_loading":"Loading","text_counter":"of"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/sight/render/js/sight.js?ver=1777452259" id="sight-block-script-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/easy-syntax-highlighter/assets/js/highlight.min.js?ver=11.9.0" id="esh-highlight-js-js"></script> <script id="esh-highlight-js-js-after"> document.addEventListener("DOMContentLoaded", () => { hljs.highlightAll(); }); </script> <script id="esh-frontend-js-extra"> var esh_i18n = {"copied":"\u5df2\u590d\u5236\uff01","copy_failed":"\u590d\u5236\u5931\u8d25"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/easy-syntax-highlighter/assets/js/frontend.js?ver=2.0.0" id="esh-frontend-js"></script> <script src="https://www.google.com/recaptcha/api.js?render=6Lfq6JMsAAAAAFwFocaWCzv-A3znzOaIyo9ACOYg&ver=3.0" id="google-recaptcha-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0" id="wp-polyfill-js"></script> <script id="wpcf7-recaptcha-js-before"> var wpcf7_recaptcha = { "sitekey": "6Lfq6JMsAAAAAFwFocaWCzv-A3znzOaIyo9ACOYg", "actions": { "homepage": "homepage", "contactform": "contactform" } }; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/modules/recaptcha/index.js?ver=6.1.5" id="wpcf7-recaptcha-js"></script> <script id="csco-scripts-js-extra"> var csLocalize = {"siteSchemeMode":"system","siteSchemeToogle":"1","shareCopiedText":"URL copied","subscribeProcess":"Processing your subscription...","subscribeSuccess":"Thank you for subscribing!","subscribeError":"Form submission error"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/themes/intro/assets/js/scripts.js?ver=6.7.11" id="csco-scripts-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/themes/intro/assets/static/js/comment-reply.js?ver=6.7.11" id="csco-comment-reply-js"></script> <script defer src="https://fatihsoysal.com/blog/wp-content/plugins/akismet/_inc/akismet-frontend.js?ver=1777452205" id="akismet-frontend-js"></script> </div> </body> </html>