Website Sudah Online 1 Tahun Tapi Tidak Ketemu di Google? Ini Checklist SEO, GEO & AI Readiness yang Saya Pelajari dari Nol
Oleh Rudian — Codenest
Satu tahun lebih website Codenest saya online-kan. Sudah punya desain yang lumayan, sudah ada portofolio, sudah ada halaman kontak. Tapi ketika saya buka Google Search Console, angkanya bikin sedih: cuma 1-2 views.
Saya coba search nama bisnis saya di Google. Tidak ketemu.
Saya coba search "jasa IT Surabaya". Tidak ketemu juga.
Pertanyaan besar muncul: "Kok customer tidak bisa menemukan saya di Google?"
Pada titik inilah saya mulai belajar SEO, GEO, dan AI Readiness — dari nol total. Dan ternyata, banyak hal yang selama ini saya anggap "sudah cukup" ternyata belum memadai sama sekali.
Artikel ini saya tulis untuk UMKM dan bisnis kecil yang mengalami masalah yang sama. Saya akan bagikan apa yang saya pelajari, kesalahan yang saya buat, dan checklist yang bisa langsung kamu praktikkan.
Bagian 1: SEO Tradisional — "Yang Selama Ini Saya Pikir Sudah Cukup"
Ketika saya mulai googling "kenapa website tidak ke-index di Google", saya menemukan bahwa ada beberapa komponen fundamental yang harus ada di website. Dan ternyata, beberapa di antaranya belum saya pasang.
1.1 robots.txt — Pintu Gerbang Pertama
robots.txt adalah file yang memberitahu Google (dan crawler lain) halaman mana yang boleh dan tidak boleh di-crawl. Tanpa file ini, Google tetap bisa meng-crawl website kamu, tapi kamu tidak punya kendali sama sekali.
Bagaimana cara mengecek?
Ketik namawebsite.com/robots.txt di browser. Kalau tidak ada, itu masalah pertama yang harus diperbaiki.
Contoh robots.txt untuk website Django:
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /blog/add/
Disallow: /blog/edit/
Disallow: /blog/admin-posts/
Disallow: /blog/reject/
Disallow: /blog/toggle-publish/
Disallow: /blog/preview/
Sitemap: https://namawebsite.com/sitemap.xml
Poin penting: Selalu sertakan baris Sitemap: di robots.txt. Ini memberitahu Google di mana menemukan peta website kamu.
1.2 Sitemap.xml — Peta Website untuk Google
Sitemap.xml adalah file yang berisi daftar semua halaman di website kamu. Tanpa sitemap, Google harus "menjelajah" website kamu secara manual untuk menemukan semua halaman. Dengan sitemap, kamu langsung memberikan peta lengkapnya.
Momen aha saya: Saya awalnya bikin sitemap secara manual — mengetik satu per satu URL untuk ratusan halaman. Salah ketik sedikit, upload ulang. Begitu terus berulang kali.
Terus saya menemukan bahwa Django sudah punya built-in sitemap framework: django.contrib.sitemaps. Saya tidak perlu bikin manual. Framework-nya akan otomatis query database dan generate sitemap.xml secara dinamis. Setiap ada blog post baru, langsung muncul di sitemap tanpa perlu tambah apapun.
Cara setup di Django:
Langkah 1:
Tambahkan ke settings.py:
INSTALLED_APPS = [
# ...
'django.contrib.sites',
'django.contrib.sitemaps',
# ...
]
SITE_ID = 1
Langkah 2: Buat file sitemaps.py di project kamu:
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
from blog.models import Post
class StaticViewSitemap(Sitemap):
changefreq = 'weekly'
priority = 0.8
def items(self):
return ['home', 'services', 'about', 'portfolio', 'faq', 'contact']
def location(self, item):
return reverse(item)
class BlogPostSitemap(Sitemap):
changefreq = 'weekly'
priority = 0.7
def items(self):
return Post.objects.filter(is_draft=False).order_by('-publish_at')
def lastmod(self, obj):
return obj.publish_at or obj.created_at
Langkah 3: Daftarkan di urls.py:
from django.contrib.sitemaps.views import sitemap
from .sitemaps import StaticViewSitemap, BlogPostSitemap
sitemaps = {
'static': StaticViewSitemap,
'blog': BlogPostSitemap,
}
urlpatterns = [
# ...
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}),
]
Setelah itu, submit sitemap kamu ke Google Search Console. Ini membantu Google menemukan dan mengindex halaman-halaman kamu lebih cepat.
1.3 Meta Tags — Yang Ternyata Bukan Cuma untuk Percantik
Sebelumnya saya pikir meta tags cuma soal "tampilan" — seperti CSS yang membuat website terlihat bagus. Ternyata, meta tags adalah salah satu cara utama Google memahami konten halaman kamu.
Meta tags yang wajib ada di setiap halaman:
<title>— Judul halaman di Google Search. Max 60 karakter, harus unik per halaman.<meta name="description">— Deskripsi singkat yang muncul di bawah judul di Google. Max 160 karakter, harus unik per halaman.<link rel="canonical">— Mencegah duplicate content. Google harus tahu versi mana yang "asli".- Open Graph —
og:title,og:description,og:image,og:url. Ini yang menentukan bagaimana website kamu tampil saat di-share di WhatsApp, Telegram, Facebook, Twitter. - Twitter Cards —
twitter:card,twitter:title,twitter:description.
Cara implementasi di Django: Gunakan template inheritance dengan {% block %}:
Di base.html:
<title>{% block title %}Default Site Title{% endblock %}</title>
<meta name="description" content="{% block meta_description %}Default description{% endblock %}">
<link rel="canonical" href="{% block canonical_url %}https://namawebsite.com{% endblock %}">
<!-- Open Graph -->
<meta property="og:title" content="{% block og_title %}Default Title{% endblock %}">
<meta property="og:description" content="{% block og_description %}Default{% endblock %}">
<meta property="og:url" content="{% block og_url %}https://namawebsite.com{% endblock %}">
Di halaman blog post_detail.html:
{% block title %}{{ post.title }} - Blog{% endblock %}
{% block meta_description %}{{ post.meta_description|default:post.content|striptags|truncatewords:30 }}{% endblock %}
{% block og_title %}{{ post.title }}{% endblock %}
{% block og_type %}article{% endblock %}
Tips: Validasi meta tags kamu di Google Rich Results Test.
1.4 Structured Data / JSON-LD — Bahasa yang Dibaca Google
Structured data adalah kode yang memberitahu Google secara eksplisit tentang "arti" konten kamu — bukan hanya teks, tapi juga hubungan antar entitas.
Schema yang wajib ada untuk bisnis lokal:
LocalBusiness— Nama bisnis, alamat, jam buka, nomor teleponWebSite+SearchAction— Enable sitelinks searchbox di GoogleBreadcrumbList— Navigasi terstrukturFAQPage— Rich results untuk FAQBlogPosting— Untuk artikel blog
Contoh JSON-LD LocalBusiness untuk UMKM:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Nama Bisnis Kamu",
"url": "https://namawebsite.com",
"logo": "https://namawebsite.com/static/images/logo.png",
"address": {
"@type": "PostalAddress",
"streetAddress": "Jalan No. 123",
"addressLocality": "Kota",
"addressRegion": "Provinsi",
"postalCode": "12345",
"addressCountry": "ID"
},
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+62-812-xxxx-xxxx",
"contactType": "customer service"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "17:00"
}
]
}
</script>
Sites dengan structured data yang benar direkomendasikan di AI-generated answers 3.2x lebih sering dibanding tanpa structured data.
lanjut ke bagian --> 2