İndirmesiz, ücretsiz mini oyunlar — şimdi keşfet. Hemen Oyun Oyna
SEO & İçerik Mimarisi Rehberi

Tarayıcı Oyunları için Uçtan Uca SEO Rehberi

Malt'ı kurarken izlediğimiz teknik mimari, on-page SEO, iç linkleme, UX ve anahtar kelime stratejisi — yüksek dwell time, düşük bounce rate ve sürdürülebilir organik sıralama hedefiyle.

Altyapı: Statik HTML/CSS/JS Oyun motoru: Yok — Vanilla Canvas API Dil: Türkçe içerik
01 / 05

Teknik Mimari ve Performans Optimizasyonu (Core Web Vitals)

Framework kullanmadığımız için burada aslında avantajlıyız: React/Next.js hydration maliyeti yok. Risk şu — Canvas oyununun kendi JS'i ve asset'leri, sayfanın asıl LCP/CLS bütçesini yiyor. Kural: oyun motoru, sayfa ilk boyandıktan sonra devreye girsin.

Lazy Loading — "Afiş + Oynat" (Facade) Deseni

Canvas'ı ve oyun script'ini sayfa yüklenir yüklenmez başlatmayın. Bunun yerine statik bir önizleme + "Oyna" butonu gösterin; gerçek oyun kodu yalnızca kullanıcı tıkladığında veya IntersectionObserver ile görünüme girdiğinde yüklensin. Bu, YouTube'un lite-embed tekniğinin Canvas karşılığıdır — 2048 sayfamızda bu deseni birebir kullandık.

HTML
<div class="game-embed" style="aspect-ratio: 4 / 3;">
  <button class="game-play-btn" data-game="2048" aria-label="2048 oyununu başlat">
    <img src="/images/2048-poster.webp" alt="2048 oyunu önizleme ekranı"
         loading="lazy" width="800" height="600">
    <span class="play-icon" aria-hidden="true">▶</span>
  </button>
</div>
JavaScript
document.querySelectorAll('.game-play-btn').forEach((btn) => {
  btn.addEventListener('click', () => loadGame(btn), { once: true });
});

function loadGame(btn) {
  const wrapper = btn.parentElement;
  const canvas = document.createElement('canvas');
  canvas.width = 800;
  canvas.height = 600;
  wrapper.replaceChildren(canvas);

  const script = document.createElement('script');
  script.src = '/games/2048/main.js';
  script.defer = true;           // parser'ı bloklamaz
  document.body.appendChild(script);
}

Sayfada birden çok script varsa: kendi oyun/UI kodunuzu her zaman defer ile, üçüncü parti (reklam, analytics) script'lerini async ile yükleyin. defer DOM sırasını korur, async korumaz — oyun mantığınız DOM'a bağımlıysa mutlaka defer kullanın.

Asset Optimizasyonu

  • Sprite'ları tek bir texture atlas (sprite sheet) olarak birleştirin — 20 ayrı PNG isteği yerine 1 istek.
  • Görselleri WebP/AVIF olarak sunun, PNG/JPG'yi yalnızca fallback olarak tutun.
  • Ses dosyalarını (varsa) kullanıcı etkileşiminden sonra yükleyin — tarayıcılar zaten otomatik sesi engelliyor, önceden yüklemek boşa bant genişliği.
  • Oyun script'inizi minify edin; kaynak haritasını (sourcemap) yalnızca geliştirme ortamında tutun.

CLS (Cumulative Layout Shift) Önleme

CLS'nin tek nedeni budur: tarayıcı, içerik gelmeden önce o içeriğin ne kadar yer kaplayacağını bilmiyor. Canvas/görsel için her zaman aspect-ratio + genişlik/yükseklik belirtin — oyun kodu yüklenmeden önce bile alan ayrılmış olur.

CSS
.game-embed {
  aspect-ratio: 4 / 3;
  width: 100%;
  max-width: 800px;
  background: var(--surface-2);   /* canvas gelene kadar iskelet rengi */
  border-radius: 12px;
  overflow: hidden;
}

.game-embed canvas,
.game-embed img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
}
LCP notu: Oyun önizleme görseli genellikle sayfanın LCP (Largest Contentful Paint) elemanı olur. Bu görsele loading="lazy" vermeyin eğer katlanmadan önce (above-the-fold) görünüyorsa — bunun yerine fetchpriority="high" ekleyin ve görseli <link rel="preload" as="image"> ile önceden yükleyin. "lazy" + "LCP elemanı" kombinasyonu LCP'yi doğrudan kötüleştirir.

JSON-LD Yapısal Veri (Kopyala-Yapıştır)

Google'ın oyunlara özel bir zengin sonuç türü yoktur, ancak VideoGame + SoftwareApplication tiplerini birlikte kullanmak, arama motorlarına varlık (entity) bağlamı verir ve bazı yazılım/uygulama zengin sonuçlarına uygunluk sağlar.

JSON-LD
{
  "@context": "https://schema.org",
  "@type": ["VideoGame", "SoftwareApplication"],
  "name": "2048",
  "url": "https://siteniz.com/oyunlar/2048",
  "image": "https://siteniz.com/images/2048-kapak.jpg",
  "description": "Sayıları birleştirerek 2048 karosuna ulaşmaya çalıştığınız, tarayıcıda ücretsiz oynanan bulmaca oyunu.",
  "applicationCategory": "GameApplication",
  "operatingSystem": "Any (Web Browser)",
  "gamePlatform": "Web Browser",
  "genre": "Puzzle",
  "playMode": "SinglePlayer",
  "inLanguage": "tr",
  "isAccessibleForFree": true,
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "USD"
  },
  "author": {
    "@type": "Organization",
    "name": "Site Adınız"
  }
}
Dikkat: aggregateRating alanını yalnızca gerçek kullanıcı puanlarınız varsa ekleyin. Uydurma rating, Google'ın yapısal veri spam politikasını ihlal eder ve manuel işlem riski taşır.
02 / 05

Oyun Sayfaları İçin On-Page SEO ve İçerik Şablonu

Sadece bir <canvas> etiketi içeren sayfa, Google için "ince içerik"tir — indekslenir ama sıralanmaz, çünkü metin karşılığı yoktur. Çözüm: oyunun etrafına, arama niyetiyle eşleşen gerçek metin içerik inşa etmek. Aşağıdaki H1–H3 hiyerarşisi her oyun sayfası için tekrar kullanılabilir bir şablondur — 2048 sayfamız tam olarak bunu izliyor.

Örnek Sayfa Şablonu — "2048"

2048 Oyna — Ücretsiz, İndirmesiz Tarayıcı Bulmacası

2048, sayıları birleştirerek 2048 karosuna ulaşmaya çalıştığınız bağımlılık yapan bir bulmaca oyunudur. Kayıt olmadan, indirmeden, doğrudan tarayıcınızda oynayabilir; mobil veya masaüstünde skorunuzu geliştirmeye çalışabilirsiniz.

[ Oyun Alanı — Canvas / Afiş+Oynat bileşeni burada yer alır ]

2048 Nasıl Oynanır?

Aynı sayıya sahip iki karo yan yana kaydırıldığında birleşir ve değerleri toplanır. Her hamlede yeni bir "2" veya "4" karosu rastgele bir boş hücrede belirir. Amaç, tahtayı doldurmadan 2048 değerine sahip bir karo oluşturmaktır.

Kontroller

CihazKontrolAksiyon
MasaüstüOk tuşları (↑ ↓ ← →)Karoları ilgili yöne kaydırır
Mobil / DokunmatikKaydırma (swipe)Karoları ilgili yöne kaydırır
Tümü"Yeniden Başlat" butonuTahtayı sıfırlar, skoru kaydeder

Yüksek Skor İçin Stratejiler

1. Köşe Stratejisi

En büyük karonuzu her zaman sabit bir köşede tutun (örn. sol alt). Bu köşeyi bozacak hamlelerden kaçının — büyük karo köşeden ayrılırsa tahtayı toparlamak zorlaşır.

2. Sıralı (Monotonik) Zincir

Köşeden başlayarak karoları büyükten küçüğe sıralı dizmeye çalışın. Bu düzen, birleşme zincirlerini öngörülebilir kılar ve tahtanın tıkanmasını geciktirir.

3. Erken Birleştirmekten Kaçının

Küçük karoları hemen birleştirmek yerine, 2-3 hamle ileriyi düşünerek büyük bir zincirleme birleşme fırsatı bekleyin.

Sık Sorulan Sorular

2048'i kazanmak mümkün mü? Evet — 2048 karosuna ulaştığınızda oyun "kazandınız" mesajı verir, dilerseniz daha yüksek karolar için devam edebilirsiniz.

En yüksek skorum nasıl kaydediliyor? Skorunuz tarayıcınızda (localStorage) otomatik olarak saklanır, sayfayı kapatıp tekrar açsanız bile kaybolmaz.

Oyun mobilde çalışıyor mu? Evet, dokunmatik kaydırma hareketleriyle tam uyumludur, ek bir uygulama indirmeniz gerekmez.

SSS bölümünü FAQPage şeması ile işaretlemek, arama sonuçlarında açılır soru-cevap zengin sonucu kazandırabilir:

JSON-LD
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "2048'i kazanmak mümkün mü?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Evet, 2048 karosuna ulaştığınızda oyun kazandınız mesajı verir; dilerseniz daha yüksek karolar için devam edebilirsiniz."
      }
    },
    {
      "@type": "Question",
      "name": "En yüksek skorum nasıl kaydediliyor?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Skorunuz tarayıcınızda (localStorage) otomatik olarak saklanır ve sayfayı kapatıp tekrar açsanız bile kaybolmaz."
      }
    }
  ]
}
Neden işe yarar: "Nasıl Oynanır", "Kontroller" ve "SSS" blokları, kullanıcıların gerçekten arattığı ("2048 nasıl oynanır", "2048 stratejileri") ifadelerle doğal olarak örtüşür — oyunu değiştirmeden sayfayı zenginleştirir.
03 / 05

Blog ve Oyun Arası İç Linkleme Mimarisi

Site mimarisini bir hub-and-spoke (merkez-uç) yapısı olarak kurun: her oyun kategorisi bir "hub" sayfasıdır; hem tekil oyun sayfalarına hem de o kategoriyle ilgili blog yazılarına bağlanır. Bu yapı hem otorite dağılımını hem de kullanıcı akışını netleştirir. Malt'ta şu an 3 oyun tek bir ana sayfa bölümünde toplanıyor; oyun sayısı arttıkça bu bölümü kategori hub sayfalarına (/oyunlar/bulmaca/, /oyunlar/arcade/ gibi) ayırmayı planlıyoruz.

Kategori Hub /oyunlar/bulmaca/ Blog: "5 Hızlı Oyun" Blog: "Bulmacanın Faydası" Oyun: 2048 Oyun: Sayı Zinciri

Blog yazıları ve oyun sayfaları birbirine doğrudan değil, kategori hub'ı üzerinden ve ayrıca en alakalı içerikle doğrudan (ör. 2048 ↔ ilgili blog yazısı) bağlanır — hem crawl derinliği azalır hem dönüşüm artar.

Kaynak SayfaHedef SayfaAnchor TextAmaç
Blog: "Mola Saatleri İçin 5 Hızlı Oyun"Oyun: 2048"2048'i hemen ücretsiz oyna"Dönüşüm
Blog: "İndirmesiz Basit Oyunlar Rehberi"Kategori Hub: Bulmaca"tüm bulmaca oyunlarını keşfedin"Kategori otoritesi
Oyun: 2048Blog: "Bulmaca Oyunlarının Zihinsel Faydaları""bulmacaların beyne faydaları"Konu otoritesi + dwell time
Oyun: 2048Oyun: Sayı Zinciri (benzer)"benzer bir oyun: Sayı Zinciri'ni dene"Pogo-sticking önleme
Kategori Hub: BulmacaKategori Hub Blog: Bulmaca Rehberleri"bulmaca oyunları hakkında yazılarımız"Konu kümesi (topic cluster) bağı

Hem oyun hem blog sayfalarına BreadcrumbList şeması ekleyin — bu, hiyerarşiyi Google'a açıkça bildirir ve arama sonucunda tam URL yerine kırıntı navigasyonu gösterir:

JSON-LD
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Anasayfa", "item": "https://siteniz.com/" },
    { "@type": "ListItem", "position": 2, "name": "Bulmaca Oyunları", "item": "https://siteniz.com/oyunlar/bulmaca/" },
    { "@type": "ListItem", "position": 3, "name": "2048", "item": "https://siteniz.com/oyunlar/2048" }
  ]
}
Anchor text kuralı: Asla "buraya tıkla" kullanmayın. Anchor, hedef sayfanın ana anahtar kelimesini doğal biçimde içermeli — bu hem kullanıcıya hem Google'a hedef sayfanın ne olduğunu önceden söyler.
04 / 05

Kullanıcı Deneyimi (UX) ve SEO Etkileşim Metrikleri

Google sıralama sinyali olarak doğrudan "dwell time" ölçmez, ama pogo-sticking (kullanıcının hemen arama sonucuna dönmesi) dolaylı olarak sıralamayı etkiler. Amaç: kullanıcıyı oyunun bitiminde de sitede tutacak sürtünmesiz mekanizmalar kurmak.

  • Skor Kaydetme (localStorage): Kullanıcı en yüksek skorunu geçmeye çalışırken geri gelir — tekrar ziyaret motivasyonu yaratır. 2048, Yılan ve Refleks Testi'nin üçünde de uyguladık.
  • Sürtünmesiz "Yeniden Başlat": Oyun bitince sayfa yenilemeden tek tıkla yeniden başlatma; her yeniden yükleme oturum süresini gereksiz kesintiye uğratır.
  • Oyun Sonu "Benzer Oyunlar" Kartı: Oyun bittiği an ekranda 2-3 benzer oyun önerisi gösterin — kullanıcı kaybettiğinde Google'a değil bir sonraki oyununuza gitsin.
  • Mola Temalı İçerik Köprüsü: Oyun sonu ekranında "5 dakikan bitti mi? Başka rahatlatıcı oyunlarımıza göz at" gibi bir blog CTA'sı — duygusal niyetle (stres, mola) örtüşür.
  • Dokunmatik + Klavye Kontrolü: Mobilde kaydırma (swipe), masaüstünde ok tuşları — ilk saniyede sürtünme yaratan her şey terk oranını yükseltir.
JavaScript
function saveHighScore(gameId, score) {
  const key = `hs_${gameId}`;
  const best = Number(localStorage.getItem(key) || 0);

  if (score > best) {
    localStorage.setItem(key, String(score));
    return { isNewRecord: true, best: score };
  }
  return { isNewRecord: false, best };
}

// Oyun bitiminde:
const result = saveHighScore('2048', currentScore);
showEndScreen({
  score: currentScore,
  best: result.best,
  isNewRecord: result.isNewRecord,
  suggestions: ['sayi-zinciri', 'sudoku-mini'], // benzer oyunlar
});
Neden işe yarar: Her mekanizma kullanıcıyı sayfadan ayrılmadan önce bir sonraki adıma yönlendirir — bu, hem oturum süresini hem de aynı ziyaretteki sayfa/oyun sayısını artırır.
05 / 05

Arama Niyeti Odaklı Anahtar Kelime ve İçerik Haritası

"Basit web oyunları" gibi geniş kelimelerde büyük sitelerle (Poki, CrazyGames) rekabet imkansız. Bunun yerine niyet bazlı, düşük rekabetli uzun kuyruklu kelimelere odaklanın:

  • Bilgilendirici: "2048 nasıl oynanır", "2048 kazanma taktikleri"
  • İşlemsel / Navigasyonel: "ücretsiz 2048 oyna online", "indirmeden bulmaca oyunu oyna"
  • Duygu/İhtiyaç Odaklı: "stres atmak için oyunlar", "iş molasında oynanacak oyunlar"
  • Cihaz/Bağlam Odaklı: "mobilde tek elle oynanan oyunlar", "klavyeyle oynanan bulmaca oyunları"
  • Liste/Karşılaştırma: "en iyi ücretsiz tarayıcı oyunları", "2048 alternatifleri"
Blog BaşlığıHedef Anahtar KelimeArama Niyeti
Mola Saatleri İçin 5 Hızlı Tarayıcı Oyunumola saatinde oynanacak oyunlarDuygusal / keşif
İndirmesiz Basit Oyunlar: 2026'nın En İyi 10 Seçimiindirmesiz basit oyunlarListe / karşılaştırma
Stres Atmak İçin En Rahatlatıcı 7 Tarayıcı Oyunustres atan oyunlarDuygusal / problem odaklı
2048 Kazanma Taktikleri: 6 Strateji2048 kazanma taktikleriDerinlemesine bilgi
Tek Elle Mobilde Oynanabilecek En İyi Bulmaca Oyunlarıtek elle oynanan mobil oyunlarCihaz bağlamlı
Oyun KategorisiHedef Anahtar KelimeArama Niyeti
Bulmaca Oyunları (2048, sayı oyunları)online bulmaca oyunları ücretsizİşlemsel
Refleks / Hız Oyunlarıhızlı refleks oyunları tarayıcıİşlemsel
Rahatlatıcı / Ambient Oyunlarrahatlatıcı basit oyunlarDuygusal
Kart & Masa Oyunlarıtarayıcıda kart oyunları oynaİşlemsel
Retro / Klasik Arcade Oyunlarklasik arcade oyunları onlineNostalji / keşif
Uygulama sırası: Önce oyun kategorilerini hub sayfası olarak kurun (bkz. bölüm 03) → sonra her kategoriye 1 oyun + 1 blog yazısı ekleyin → iç linklerle bağlayın. Böylece her yeni içerik parçası, sıfırdan değil var olan bir otorite ağının üzerine eklenir.

Şu An Oynanabilir Oyunlar

Bu rehberdeki desenlerin (facade lazy-load, H1-H3 içerik şablonu, localStorage skor, JSON-LD) hepsi Malt'ın üç oyununda canlı olarak kullanılıyor: