📊 Blog 2025 SEO Analiz Raporu

Multi-Tenant Blog Sistemi - Eksiklik ve İyileştirme Önerileri

8.5
Mevcut SEO Skoru / 10
9.5
Hedef Skor (İyileştirme Sonrası)
4
Kritik Eksiklik
6
Orta Öncelik İyileştirme

🎯 Executive Summary

iXtif blog sistemi 2025 SEO standartlarına %85 uyumlu ancak bazı kritik eksiklikler var. Mevcut schema yapısı mükemmel, structured content sistemi doğru, ancak E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) sinyalleri güçlendirilmeli.

🔴 En Kritik 4 Eksiklik:

  • Author Schema Person Değil: Google E-E-A-T için gerçek yazar gerekli (şu an Organization)
  • FAQ/HowTo Render Edilmiyor: Veritabanında var ama frontend'de görünmüyor
  • Word Count Yok: 2025'te long-form content (1500+ kelime) ranking faktörü
  • Image Width/Height Eksik: Core Web Vitals CLS (Cumulative Layout Shift) sorunu

✅ Güçlü Yönler:

  • BlogPosting schema eksiksiz ve Google standardına uygun
  • Structured content (FAQ, HowTo, Excerpt ayrı fields) doğru
  • Multi-lang + Multi-tenant altyapısı mükemmel
  • SEO traits ve helpers tam entegre
  • Breadcrumb, TOC, reading time gibi UX özellikleri var

💡 Tavsiye:

Yüksek öncelikli 4 eksikliği gider → SEO skoru 8.5'ten 9.5'e çıkar. Ardından orta öncelikli iyileştirmeler ile Google'da üst sıralara çıkma şansı artar.

📋 Mevcut Yapı Analizi

SEO Settings Sistemi:

// ✅ Mevcut Settings (tenant_ixtif database) setting('site_title') = "iXtif" setting('company_name') = "İxtif İç ve Dış Ticaret A.Ş." setting('site_description') = "" // ❌ Boş! setting('author_name') = "" // ❌ Boş! setting('author_bio') = "" // ❌ Boş! // Blog Schema'da kullanım: 'author' => [ '@type' => 'Organization', // ❌ Person olmalı! 'name' => setting('site_title') ?? config('app.name'), 'url' => url('/') ]

Mevcut Güçlü Özellikler

1. Schema Markup EXCELLENT ⭐⭐⭐⭐⭐

Dosya: Blog.php → getSeoFallbackSchemaMarkup() (line 273-341)

  • BlogPosting schema (Google recommended type)
  • Author as Organization (mevcut - ama Person olmalı!)
  • Publisher with logo (required - ✅ var)
  • datePublished + dateModified (required - ✅ var)
  • mainEntityOfPage (WebPage reference - ✅ var)
  • isPartOf (Blog structure - ✅ var)
  • articleSection (category - ✅ var)
  • keywords (tags - ✅ var)
  • timeRequired (ISO 8601 format - ✅ var)
  • Image with width/height (✅ var)

📄 Mevcut Blog Schema Örneği (ixtif.com):

{ "@context": "https://schema.org", "@type": "NewsArticle", // veya BlogPosting "headline": "Forklift Güvenlik İpuçları", "datePublished": "2025-11-15T04:17:19Z", "dateModified": "2025-11-15T04:24:59Z", "author": { "@type": "Organization", // ❌ Person olmalı! "name": "iXtif", "url": "https://ixtif.com" }, "publisher": { "@type": "Organization", // ✅ Doğru "name": "iXtif" }, "image": { "@type": "ImageObject", "url": "https://ixtif.com/storage/..." } }

2. E-E-A-T Signals GOOD ⭐⭐⭐⭐

  • Author: Organization name (setting('site_title')) ✅
  • Publisher: Organization with logo ✅
  • Published date (authority signal) ✅
  • Updated date (freshness signal) ✅
  • Review date (yok - eklenecek) ❌
  • Real Person author (yok - eklenecek) ❌
  • Author credentials (yok - eklenecek) ❌

3. Structured Content PERFECT ⭐⭐⭐⭐⭐

// Blog Model - Database Structure protected $casts = [ 'title' => 'array', // ✅ Multi-lang 'slug' => 'array', // ✅ Multi-lang 'body' => 'array', // ✅ Ana içerik 'excerpt' => 'array', // ✅ Meta description için 'faq_data' => 'array', // ✅ FAQ (opsiyonel) 'howto_data' => 'array', // ✅ HowTo (opsiyonel) ]; // ✅ 2025 Headless CMS Best Practice! // Her tenant ihtiyacına göre FAQ/HowTo kullanır/kullanmaz

4. SEO Features EXCELLENT ⭐⭐⭐⭐⭐

  • HasSeo trait (meta, OG, robots) ✅
  • Breadcrumb schema (Blog.php line 593-652) ✅
  • Canonical URL ✅
  • Reading time calculation ✅
  • Auto-excerpt generation ✅
  • Tag management ✅
  • Related posts ✅

5. Frontend UX GOOD ⭐⭐⭐⭐

Dosya: show-content.blade.php

  • Reading progress bar ✅
  • TOC (Table of Contents) ✅
  • Featured image with lightbox ✅
  • Gallery with metadata ✅
  • Related posts ✅
  • Prev/Next navigation ✅
  • Heading anchors (share links) ✅
  • FAQ section render (yok - eklenecek) ❌
  • HowTo section render (yok - eklenecek) ❌

📊 Feature Karşılaştırma Tablosu

Özellik 2025 Standart Mevcut Durum Durum
BlogPosting Schema Required ✅ Var (NewsArticle)
Author as Person Required (E-E-A-T) ❌ Organization
Publisher Organization Required ✅ Var + Logo
Date Published/Modified Required ✅ Var
Word Count Recommended ❌ Yok
Reading Time Recommended ✅ Var (ISO 8601)
FAQ Schema Recommended ✅ Var ama render yok
HowTo Schema Recommended ✅ Var ama render yok
Breadcrumb Schema Recommended ✅ Var
Image Dimensions Required (CLS) ❌ Width/Height yok
Structured Content Best Practice ✅ Mükemmel
Multi-lang Support Best Practice ✅ JSON columns

🔴 Kritik Eksiklikler (Yüksek Öncelik)

KRİTİK 1. Author Schema - Person Type Gerekli

❌ Mevcut Sorun:

// Blog.php line 286-290 'author' => [ '@type' => 'Organization', // ❌ YANLIŞ! 'name' => setting('site_title') ?? config('app.name'), 'url' => url('/') ] // Google E-E-A-T Kriteri: // "Experience" için GERÇEK YAZAR (Person) gerekli!

✅ Çözüm:

// 1. blogs tablosuna yeni fieldler: - author_name (string, nullable) - author_title (string, nullable) // "İçerik Editörü", "Endüstri Uzmanı" - author_bio (text, nullable) - author_image (media collection) - author_social_links (array, nullable) // LinkedIn, Twitter // 2. Schema güncelle: 'author' => [ '@type' => 'Person', // ✅ DOĞRU! 'name' => $this->author_name ?? setting('default_author_name'), 'jobTitle' => $this->author_title ?? 'İçerik Editörü', 'description' => $this->author_bio, 'url' => url('/yazar/' . Str::slug($this->author_name)), 'image' => $this->getAuthorImage(), 'sameAs' => $this->author_social_links ?? [] ] // 3. Settings'e fallback yazar ekle: setting('default_author_name') = "Ahmet Yılmaz" setting('default_author_title') = "İçerik Müdürü" setting('default_author_bio') = "10 yıllık endüstri deneyimi..." setting('default_author_image') = "/images/default-author.jpg"

Neden Önemli?

  • Google E-E-A-T'nin "Experience" kriteri - gerçek insan gerekli
  • AI-generated content detection'dan kaçınma
  • Authoritativeness (otorite) sinyali
  • Featured snippet kazanma şansı artar

KRİTİK 2. FAQ/HowTo Frontend Render

❌ Mevcut Sorun:

faq_data ve howto_data veritabanında var ama show-content.blade.php'de render edilmiyor! Schema var ama kullanıcı görmüyor → Google "hidden content" olarak işaretleyebilir.

✅ Çözüm (show-content.blade.php'ye ekle):

{{-- FAQ Section (line ~250'den sonra ekle) --}} @if($item->faq_data && count($item->faq_data) > 0) <section class="mt-16 pt-12 border-t-2"> <h2 class="text-2xl font-bold mb-8"> Sık Sorulan Sorular </h2> <div class="space-y-4"> @foreach($item->faq_data as $faq) <details class="bg-white rounded-lg shadow p-6"> <summary class="font-semibold cursor-pointer"> {{ $faq['question'] }} </summary> <p class="mt-4 text-gray-700"> {{ $faq['answer'] }} </p> </details> @endforeach </div> </section> @endif {{-- HowTo Section --}} @if($item->howto_data && isset($item->howto_data['steps'])) <section class="mt-16 pt-12 border-t-2"> <h2 class="text-2xl font-bold mb-8"> {{ $item->howto_data['name'] ?? 'Adım Adım Rehber' }} </h2> <ol class="space-y-6"> @foreach($item->howto_data['steps'] as $index => $step) <li class="flex gap-4"> <span class="flex-shrink-0 w-8 h-8 rounded-full bg-blue-600 text-white"> {{ $index + 1 }} </span> <div> <h3 class="font-semibold mb-2">{{ $step['name'] }}</h3> <p>{{ $step['text'] }}</p> </div> </li> @endforeach </ol> </section> @endif

Neden Önemli?

  • Google "visible content" kuralı - schema'daki data görünür olmalı
  • FAQ rich results kazanma şansı (mobile'da öne çıkar)
  • User engagement artar (daha fazla bilgi)
  • Bounce rate düşer (kullanıcı cevap bulur)

KRİTİK 3. Word Count Tracking

❌ Mevcut Sorun:

Reading time var ama word count yok. 2025 SEO: Long-form content (1500+ kelime) ranking faktörü.

✅ Çözüm (Blog.php'ye ekle):

// Blog Model - yeni method public function getWordCount(?string $locale = null): int { $locale = $locale ?? app()->getLocale(); $content = $this->getTranslated('body', $locale); if (!$content) return 0; $plainText = strip_tags($content); return str_word_count($plainText); } // Schema'ya ekle (getSeoFallbackSchemaMarkup içinde): $schema['wordCount'] = $this->getWordCount($currentLocale); // Frontend'de göster (show-content.blade.php): <span>📖 {{ $item->getWordCount($currentLocale) }} kelime</span>

Neden Önemli?

  • Google long-form content'i tercih eder (1500+ kelime)
  • E-E-A-T - detaylı içerik = expertise sinyali
  • Admin panelde kalite kontrolü (çok kısa içerik uyarısı)
  • AI content detection - long-form human-written sinyali

KRİTİK 4. Image Width/Height (Core Web Vitals)

❌ Mevcut Sorun:

Görsellerde width ve height attribute'ları yok → CLS (Cumulative Layout Shift) sorunu → Core Web Vitals fail!

✅ Çözüm (show-content.blade.php - line 114):

{{-- YANLIŞ (mevcut): --}} <img src="{{ $featuredImage->getUrl() }}" alt="..." loading="lazy"> // ❌ Width/height yok! {{-- DOĞRU: --}} @php $width = $featuredImage->getCustomProperty('width') ?? 1200; $height = $featuredImage->getCustomProperty('height') ?? 630; @endphp <img src="{{ $featuredImage->getUrl() }}" alt="..." width="{{ $width }}" // ✅ CLS önler! height="{{ $height }}" // ✅ CLS önler! loading="eager"> // ✅ Featured image için eager {{-- Gallery için lazy: --}} <img src="..." width="..." height="..." loading="lazy">

Neden Önemli?

  • Core Web Vitals - Google ranking faktörü
  • CLS önleme - sayfa yüklenirken layout shift olmamalı
  • Mobile performance - özellikle yavaş bağlantılarda
  • PageSpeed Insights skoru artar

🟡 Orta Öncelikli İyileştirmeler

ORTA 5. Content Quality Signals

Eklenecek fieldler:

  • reviewed_at (datetime) - Son review tarihi
  • fact_checked_at (datetime) - Fact-check tarihi
  • references (array) - Dış kaynaklar listesi

Schema kullanımı: isBasedOn, citation properties

ORTA 6. AI Content Protection

E-E-A-T badges ekle:

  • ✅ Expert review checkbox
  • ✅ Original research checkbox
  • ✅ Primary sources checkbox
  • ✅ Author expertise badge

ORTA 7. Social Sharing Metadata

Open Graph + Twitter Card:

  • og:type = article
  • article:published_time
  • article:author
  • twitter:card = summary_large_image

🟢 Düşük Öncelikli (İleride)

DÜŞÜK 8. Video Schema

Video eklendikçe VideoObject schema gerekli

DÜŞÜK 9. Schema Testing

Admin panele "Google Rich Results Test" butonu

DÜŞÜK 10. Breadcrumb Visual

Breadcrumb schema var, görsel breadcrumb entegrasyonu

🔍 Canlı Schema Analizi

Blog Detail (ixtif.com/blog/forklift-guvenlik-ipuclari):

✅ Mevcut NewsArticle Schema:

{ "@context": "https://schema.org", "@type": "NewsArticle", "url": "https://ixtif.com/blog/forklift-guvenlik-ipuclari", "inLanguage": "tr", "headline": "Forklift Güvenlik İpuçları - iXtif", "datePublished": "2025-11-15T04:17:19Z", "dateModified": "2025-11-15T04:24:59Z", "author": { "@type": "Organization", // ❌ Person olmalı! "name": "iXtif" }, "publisher": { "@type": "Organization", // ✅ Doğru "name": "iXtif" }, "image": { "@type": "ImageObject", "url": "https://ixtif.com/storage/tenant2/73/..." } }

✅ FAQPage Schema (Mevcut - Render Edilmiyor!):

{ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "Forklift kullanırken nelere dikkat edilmelidir?", "acceptedAnswer": { "@type": "Answer", "text": "Hız kontrolü, dönüşlerde dikkat..." } } ] } // ⚠️ SORUN: Schema var ama FAQ frontend'de görünmüyor! // Google "hidden content" olarak işaretleyebilir

✅ Organization Schema:

{ "@context": "https://schema.org", "@type": "Organization", "@id": "https://ixtif.com#organization", "name": "iXtif", "url": "https://ixtif.com", "logo": { ... }, "sameAs": [ "https://facebook.com/ixtif", "https://x.com/ixtifcom", "https://instagram.com/ixtifcom", "https://www.linkedin.com/company/ixtif" ] }

📊 Schema Comparison: Blog vs Shop

Property Blog Shop Not
@type NewsArticle/BlogPosting Product ✅ Her ikisi de doğru
author Organization ❌ N/A Blog: Person olmalı!
publisher Organization ✅ N/A Blog: Doğru
datePublished ✅ Var N/A Blog: Ranking faktörü
FAQPage ✅ Var ama gizli ? Blog: Render gerekli
HowTo ✅ Var ama gizli ? Blog: Render gerekli

🏢 Tenant-Based Blog Features Sistemi

Her tenant farklı sektör, farklı ihtiyaç → Özelleştirilebilir blog özellikleri gerekli

Tenant Settings Tablosu (Öneri):

// settings tablosuna yeni group: "blog_features" Blog Features Settings: - faq_enabled (boolean) // FAQ göster/gizle - howto_enabled (boolean) // HowTo göster/gizle - excerpt_enabled (boolean) // Excerpt göster/gizle - author_enabled (boolean) // Yazar bilgisi göster/gizle - word_count_enabled (boolean) // Kelime sayısı göster/gizle - reading_time_enabled (boolean) // Okuma süresi göster/gizle - toc_enabled (boolean) // TOC göster/gizle - related_posts_enabled (boolean)// İlgili yazılar göster/gizle - gallery_enabled (boolean) // Galeri göster/gizle - tags_enabled (boolean) // Etiketler göster/gizle - prev_next_enabled (boolean) // Önceki/Sonraki göster/gizle // AI Content Generation Settings: - ai_faq_generation (boolean) // AI ile FAQ üretilsin mi? - ai_howto_generation (boolean) // AI ile HowTo üretilsin mi? - ai_image_generation (boolean) // AI ile görsel üretilsin mi?

Tenant Örnekleri:

🏭 Forklift Satıcısı (iXtif):

✅ FAQ Enabled
Müşteriler çok soru sorar
✅ HowTo Enabled
Kullanım kılavuzları önemli
✅ Excerpt Enabled
Ürün listeleri için özet
✅ Author Enabled
Uzman yazar göster
✅ Word Count
Detaylı içerik vurgusu
✅ Gallery Enabled
Ürün görselleri

🎤 Şarkıcı Kişisel Sitesi:

❌ FAQ Disabled
Gereksiz
❌ HowTo Disabled
Şarkı dinleme adımı yok
✅ Excerpt Enabled
Albüm kartları için
❌ Author Disabled
Sanatçı kendi yazar
❌ Word Count
Kısa güncellemeler
✅ Gallery Enabled
Konser fotoğrafları

🏥 Hastane Sitesi:

✅ FAQ Enabled
Tedavi soruları
✅ HowTo Enabled
Tahlil hazırlık adımları
✅ Excerpt Enabled
Hizmet özetleri
✅ Author Enabled
Doktor bilgisi (E-E-A-T kritik!)
✅ Word Count
Detaylı sağlık bilgisi
✅ Related Posts
İlişkili tedaviler

⚙️ Admin Panel Implementasyonu

Admin Panel - Blog Settings Sayfası:

// Route: /admin/blog/settings Frontend Features: ☑️ FAQ Göster ☑️ HowTo Rehber Göster ☑️ Özet (Excerpt) Göster ☑️ Yazar Bilgisi Göster ☑️ Kelime Sayısı Göster ☑️ Okuma Süresi Göster ☑️ İçindekiler (TOC) Göster ☑️ İlgili Yazılar Göster ☑️ Galeri Göster ☑️ Etiketler Göster ☑️ Önceki/Sonraki Navigasyon AI Generation Features: ☑️ FAQ'leri AI ile Üret ☑️ HowTo Rehberi AI ile Üret ☑️ Görselleri AI ile Üret ☑️ Meta Description'ı AI ile Üret SEO Features: ☑️ Word Count Schema'ya Ekle ☑️ Reading Time Schema'ya Ekle ☑️ Author as Person (E-E-A-T) ☑️ Review Date Tracking

Code Implementation:

// show-content.blade.php'de kullanım: @if(tenant_setting('blog_features.faq_enabled', true)) @if($item->faq_data && count($item->faq_data) > 0) {{-- FAQ Section Render --}} @endif @endif @if(tenant_setting('blog_features.howto_enabled', true)) @if($item->howto_data) {{-- HowTo Section Render --}} @endif @endif @if(tenant_setting('blog_features.word_count_enabled', true)) <span>📖 {{ $item->getWordCount($currentLocale) }} kelime</span> @endif

AI Content Generation Kontrolü:

// BlogAIContentWriter.php içinde: if (tenant_setting('blog_features.ai_faq_generation', true)) { $faqPrompt = "Bu konuyla ilgili 5-10 SSS oluştur..."; $faqData = $this->openaiService->ask($faqPrompt); $blogData['faq_data'] = $faqData; } if (tenant_setting('blog_features.ai_howto_generation', true)) { $howtoPrompt = "Step-by-step rehber oluştur..."; $howtoData = $this->openaiService->ask($howtoPrompt); $blogData['howto_data'] = $howtoData; } if (tenant_setting('blog_features.ai_image_generation', true)) { $imagePrompt = "Başlık için featured image üret..."; $image = $this->aiImageService->generate($imagePrompt); // Blog'a featured image ekle }

🚀 Aksiyon Planı - Öncelik Sırası

4
Yüksek Öncelik
6
Orta Öncelik
3
Düşük Öncelik
2-3
Gün (Tahmini Süre)

🔴 YÜKSEK ÖNCELİK (Hemen Yap - 1 Gün)

1. Author Schema - Person Type 2-3 Saat

Migration:

  • blogs tablosuna: author_name, author_title, author_bio, author_social_links (array)
  • settings (SEO group): default_author_name, default_author_title, default_author_bio, default_author_image

Model Update:

  • Blog.php → getAuthorImage() method
  • getSeoFallbackSchemaMarkup() → author Person schema

Admin:

  • Blog yönetim sayfasında "Yazar" dropdown (settings'ten)
  • SEO settings'de default author bilgileri

2. FAQ/HowTo Frontend Render 1-2 Saat

Dosya: show-content.blade.php (line ~250'den sonra)

  • FAQ section ekle (details/summary accordion)
  • HowTo section ekle (ordered list + step numbers)
  • Tailwind styling (dark mode dahil)
  • Responsive design

3. Word Count Tracking 1 Saat

Model:

  • Blog.php → getWordCount() method
  • getSeoFallbackSchemaMarkup() → 'wordCount' property ekle

Frontend:

  • show-content.blade.php → word count badge
  • Admin panelde word count göster (kalite kontrolü için)

4. Image Width/Height (Core Web Vitals) 30 Dakika

Dosya: show-content.blade.php

  • Featured image: width/height attributes ekle
  • Gallery images: width/height attributes ekle
  • Featured image: loading="eager" (LCP optimize)
  • Gallery: loading="lazy" (performance)

✅ Toplam: 5-7 Saat (1 İş Günü)

🟡 ORTA ÖNCELİK (Bu Hafta - 1-2 Gün)

5. Content Quality Signals 2 Saat

Migration:

  • blogs: reviewed_at, fact_checked_at (datetime)
  • blogs: references (array) - dış kaynaklar

Schema:

  • isBasedOn property (primary sources)
  • citation property (references)

Admin:

  • Review checkbox + tarih
  • Fact-check checkbox + tarih
  • Kaynaklar (URL listesi) textarea

6. AI Content Protection - E-E-A-T Badges 3 Saat

Migration:

  • blogs: is_expert_reviewed, is_original_research, has_primary_sources (boolean)

Frontend:

  • Badge'ler (✅ Uzman İncelemesi, ✅ Orijinal Araştırma)
  • Author expertise badge

7. Social Sharing Metadata 1 Saat

Dosya: show.blade.php → @push('meta')

  • Open Graph: article:published_time, article:author, article:section, article:tag
  • Twitter Card: summary_large_image

8. Tenant Blog Features Settings 4 Saat

Settings Group Oluştur:

  • "blog_features" setting group
  • FAQ, HowTo, Excerpt, Author, Word Count vb. toggle'lar

Admin Panel:

  • /admin/blog/settings sayfası
  • Livewire component (toggle switches)
  • tenant_setting() helper ile kullanım

Frontend Update:

  • show-content.blade.php → conditional renders
  • BlogAIContentWriter → conditional AI generation

9. AI Image Generation 3 Saat

Entegrasyon:

  • BlogAIContentWriter → AI Image Generator entegrasyonu
  • tenant_setting('blog_features.ai_image_generation') kontrolü
  • Featured image otomatik oluştur

10. Breadcrumb Görsel Entegrasyon 1 Saat

Frontend:

  • Breadcrumb schema var, görsel breadcrumb glass-subheader'da var
  • Tam entegrasyon kontrolü

✅ Toplam: 14 Saat (2 İş Günü)

🟢 DÜŞÜK ÖNCELİK (İleride)

11. Video Schema İleride

Video eklendikçe VideoObject schema gerekli

12. Schema Testing (Admin Panel) İleride

Google Rich Results Test API entegrasyonu

13. Performance Monitoring İleride

Core Web Vitals tracking + admin dashboard

📌 Önerilen Çalışma Sırası:

  1. Gün 1: Yüksek öncelikli 4 madde (5-7 saat)
  2. Gün 2-3: Orta öncelikli 6 madde (14 saat)
  3. Gün 4: Test + cache clear + dokümentasyon

Sonuç: SEO skoru 8.5 → 9.5, Google ranking potansiyeli artar!

📝 Test Checklist

Her İyileştirme Sonrası:

  • ✅ Google Rich Results Test (schema validation)
  • ✅ PageSpeed Insights (Core Web Vitals)
  • ✅ Mobile-Friendly Test
  • ✅ Schema.org validator
  • ✅ Light mode + Dark mode test
  • ✅ Multi-lang test (TR, EN)
  • ✅ Cache clear (OPcache + view + response)
  • ✅ Hard refresh (CTRL+F5)

Final Test (Tüm İyileştirmeler Sonrası):

  • ✅ 3 farklı tenant'ta test (iXtif, başka sektörler)
  • ✅ FAQ/HowTo toggle'ları test
  • ✅ AI generation test (FAQ + HowTo + Image)
  • ✅ Author Person schema validate
  • ✅ Word count doğru hesaplama
  • ✅ Image dimensions doğru (CLS yok)
  • ✅ Social sharing preview (Facebook + Twitter)
  • ✅ Mobile responsive (iPhone + Android)