# SEO

XML Sitemap dan robots.txt: Cara Bina, Audit dan Troubleshoot

XML Sitemap dan robots.txt: Cara Bina, Audit dan Troubleshoot

XML Sitemap ialah discovery dan inventory hint: ia memberitahu search engine tentang preferred URL dan file yang dianggap penting. robots.txt ialah access protocol: ia memberitahu compliant crawler URL path yang boleh diminta. Kedua-duanya tidak guarantee indexing atau ranking dan tidak melindungi private information.

Pilih control berdasarkan outcome

Discovery: Sitemap bersama crawlable link. Crawl access: robots.txt. Index exclusion: crawlable noindex atau real removal response. Duplicate consolidation: Canonical atau redirect. Confidentiality: authentication dan authorization.

Lima control ini tidak boleh ditukar ganti

Outcome diperlukanPrimary controlEvidence berjayaJangan ganti dengan
Bantu search engine discover preferred URLCrawlable internal link dan clean SitemapURL linked, listed dan fetchableRepeated URL Inspection request
Halang compliant bot meminta sesuatu pathrobots.txt rule untuk crawler dan host ituRule match tested URLnoindex yang masih membenarkan crawl
Keluarkan accessible page daripada Google Carirobots meta atau X-Robots-Tag noindexGoogle boleh fetch dan baca directiverobots.txt Disallow
Remove retired public URL secara permanent404/410 atau 301/308 ke true replacementFinal HTTP response sepadan dengan keputusanBuang daripada Sitemap sahaja
Consolidate equivalent duplicate URLConsistent Canonical signal atau permanent redirectPreferred URL digunakan dalam link dan SitemapBlock duplicate dalam robots.txt
Protect private atau confidential contentAuthentication dan server-side authorizationUnauthorized request tidak boleh retrieve contentrobots.txt, noindex atau unlinked URL

Adakah website memerlukan Sitemap?

Google menyatakan small site sekitar 500 page atau kurang mungkin tidak memerlukan Sitemap jika semua important page boleh dicapai melalui normal link. Namun Sitemap masih berguna untuk small business ketika launch, migration, multilingual expansion dan inventory monitoring.

Sitemap melengkapkan site architecture; ia tidak membaiki orphan page. Gunakan panduan site architecture dan panduan internal linking untuk real discovery path.

SituasiNilai SitemapCompanion lebih penting
New domain dengan sedikit external linkTinggi: tunjuk preferred launch inventoryLink daripada homepage, hub dan relevant external profile
Small service site yang comprehensively linkedUseful tetapi tidak essential untuk discoveryClear navigation dan direct internal link
Large ecommerce, publishing atau marketplaceTinggi: partition inventory besar dan berubahFaceted-navigation control, log dan stable URL rule
Multilingual websiteTinggi jika Sitemap hreflang ialah chosen implementationSelf-Canonical locale URL dan reciprocal alternate
Image, video atau news-led siteTinggi jika specialized file sukar ditemukanAccessible media, valid landing page dan feature requirement
Website migrationTinggi: tunjuk final preferred URL setOne-to-one redirect, preserved content dan production crawl QA

Pilih Sitemap format yang boleh dimaintain

FormatSesuai untukCapability dan limit
XML URL setKebanyakan site dan CMSSupport URL, lastmod serta Google extension untuk locale, image, video dan news
Sitemap indexMultiple XML file atau large inventoryReference child Sitemap; mengandungi Sitemap location, bukan page URL
RSS atau AtomPublisher dengan reliable feedUseful untuk recent URL; bukan complete historical inventory
Text SitemapSimple page-only inventorySatu absolute URL setiap line; tiada lastmod atau extension
HTML SitemapHuman navigation dan accessibilityNormal webpage, bukan pengganti protocol-compliant Sitemap submission

Bina Sitemap daripada canonical inventory

Generator paling selamat menggunakan source of truth yang sama dengan publishing system. URL hanya masuk Sitemap apabila intended state ialah public, indexable dan canonical. List yang dihasilkan daripada blind crawl boleh mengekalkan parameter duplicate, redirect atau staging route.

Google cuba crawl exact absolute URL yang diberikan. Selaraskan protocol, hostname, path casing, trailing-slash policy dan locale path dengan final Canonical.

URL inclusion gate
  • Absolute fully qualified production HTTPS URL.
  • Preferred Canonical version dengan hostname, path dan locale yang betul.
  • Expected HTTP 200 dengan meaningful visible content.
  • Dibenarkan robots.txt dan tidak protected by login.
  • Tiada robots meta atau X-Robots-Tag noindex.
  • Bukan duplicate parameter, sort, filter, session atau tracking variation.
  • Dicapai melalui sekurang-kurangnya satu useful crawlable internal link.
  • Sesuai sebagai landing page daripada search result.
  • Disenaraikan sekali dalam correct child Sitemap.
  • Dibuang automatik apabila publishing atau index decision berubah.

Exclude URL yang menyampaikan index story berbeza

URL stateSitemap treatmentCorrect technical treatment
301/308 permanent redirectExclude source; list final preferred URL sahajaOld URL direct redirect ke closest equivalent
302/307 temporary redirectBiasanya exclude source daripada preferred inventoryConfirm URL mana perlu kekal indexed
404/410 retired URLExcludeKekalkan real removal response dan repair internal link
5xx atau persistent timeoutJangan tampilkan sebagai healthy inventoryFix server atau application cause
noindex pageExcludeKekalkan crawlable sehingga Google process directive
Canonical duplicateExclude duplicate; include preferred representativeAlign internal link, hreflang dan Canonical
Internal search atau weak filterExcludeDeliberate index/crawl rules ikut value dan scale
Staging, preview, admin atau account URLExcludeProtect private environment dan session dengan access control

Patuhi protocol limit dan file scope

Satu Sitemap terhad kepada 50,000 URL atau 50 MB uncompressed. Sitemap index boleh reference sehingga 50,000 Sitemap file dan tertakluk kepada uncompressed size limit sama. Compression kurangkan transfer size, bukan protocol limit.

Gunakan UTF-8, entity-escape XML value dan stable public Sitemap URL. Melainkan disubmit melalui Search Console, Sitemap biasanya hanya meliputi descendant parent directory; root placement mengelakkan accidental scope restriction.

Protocol itemRequirementAudit check
URL setMaksimum 50,000 URL dan 50 MB uncompressedCount entry dan uncompressed byte sebelum release
Sitemap indexMaksimum 50,000 child Sitemap dan 50 MBChild location resolve dan mengandungi intended host inventory
EncodingUTF-8 dengan valid XML dan escaped entityParser menerima ampersand, non-Latin path dan namespace
LocationStable accessible URL dalam valid scopeRoot placement atau verified cross-site submission disengajakan
Page URLFully qualified absolute URLTiada relative path, development host atau mixed protocol
OrderingTiada ranking meaningJangan sort mengikut supposed importance

Partition child Sitemap untuk diagnosis

Membahagikan small inventory kepada ratusan file menambah maintenance noise. Partition apabila kumpulan mempunyai template, owner, update pattern atau risk berbeza supaya Search Console filter menunjukkan actionable cohort.

SEOWithJack kini menggunakan satu root Sitemap index yang reference post, page dan category child Sitemap. Post Sitemap merangkumi English, Malay dan Simplified Chinese article URLs, manakala robots.txt menunjuk kepada satu root index. Pattern ini mudah diaudit dan masih boleh isolate content type.

Possible child SitemapUseful apabilaPoor reason
Posts atau articlesEditorial URL berkongsi publishing dan refresh ruleSetiap bulan mesti ada permanent file
Pages atau servicesCommercial/static template perlukan separate monitoringURL count lebih kecil
Products atau categoriesTemplate dan Canonical risk perlu cohortUntuk claim higher priority
LocalesTeam atau platform maintain language berasinganUntuk elak proper hreflang relationship
Images, videos atau newsSpecialized extension dan validation terpakaiWebsite mempunyai satu ordinary image
Legacy migration cohortTemporary monitoring untuk moved URL didokumenkanRedirect old URL dianggap preferred page

Gunakan lastmod sebagai factual change record

Google mungkin menggunakan <lastmod> untuk crawl scheduling jika nilainya consistently dan verifiably accurate. Ia perlu mewakili last significant page change, bukan Sitemap generation time, deployment timestamp atau copyright year.

Google mengabaikan <priority> dan <changefreq>. Unauthenticated Sitemap Ping endpoint juga sudah deprecated dan memberi 404; gunakan stable Sitemap URL bersama Search Console, robots.txt atau Search Console API.

PerubahanUpdate lastmod?Sebab
Rewrite main guidance dengan new evidenceYaPage berubah secara meaningful
Tambah atau correct important structured dataYaGoogle menganggapnya potentially significant
Ubah important internal link atau navigation contextBiasanya ya jika materialDiscovery dan page relationship berubah
Fix satu typo atau compress same imageBiasanya tidakPurpose dan information tidak berubah materially
Update footer, copyright atau global CSS sahajaTidak untuk semua content URLShared cosmetic build bukan content refresh
Republish unchanged text dengan tarikh hari iniTidakSignal tidak accurate dan freshness misleading
Aggregator page berubah automatikHanya jika system boleh kira meaningful update dengan tepatOmit lastmod jika confidence rendah

Selaraskan Sitemap, status, Canonical dan index rule

SignalPreferred indexable URLRetired URLDuplicate URLPrivate URL
HTTP response200404/410 atau relevant 301/308200 atau redirect ikut product need401/403 atau authenticated access
robots.txtAllow crawlBiasanya tiada rule khasAllow jika Google perlu baca Canonical/noindexBukan security control
robots meta/headerIndex dibenarkanTidak perlu untuk true removalnoindex hanya jika exclusion intendedBukan security control
CanonicalSelf-referential preferred URLTiada pada removed responseKe equivalent representative jika sesuaiTidak digunakan
Internal linkTerus ke preferred URLRemove atau updatePrefer representative URLDalam authorized experience sahaja
SitemapIncludeExcludeExclude nonpreferred duplicateExclude

Multilingual Sitemap dan hreflang

XML ialah satu daripada tiga Google-supported hreflang method yang equivalent. Jika dipilih, setiap localized URL mempunyai <url> entry sendiri, dan setiap entry menyenaraikan dirinya serta semua alternate melalui identical xhtml:link annotation.

Jangan guna hreflang untuk membaiki translated navigation di sekeliling untranslated main content. Setiap locale URL perlu real indexable localized page dengan self-Canonical dan supported language code. Rujuk panduan multilingual SEO.

Locale-cluster validation
  • Setiap indexable language URL mempunyai Sitemap URL entry.
  • Setiap entry list dirinya dan semua alternate.
  • Alternate set reciprocal dan identical.
  • Semua href ialah absolute production URL.
  • Setiap alternate HTTP 200 dan self-Canonical dalam locale itu.
  • Language code menggunakan supported ISO language dan optional region.
  • x-default hanya untuk deliberate fallback destination.
  • Redirect, noindex, blocked atau untranslated variant tidak declared valid.
  • HTML atau HTTP-header hreflang tidak contradict mapping.

Gunakan specialized extension hanya bila membantu discovery

ExtensionUseful untukRelease gate
ImageImportant image yang sukar ditemui, termasuk sesetengah JavaScript-reached assetImage URL crawlable dan current supported tag sahaja
VideoPage dengan video sebagai main contentLanding page, thumbnail, player/content URL dan required field accessible
NewsEligible news publisher dengan current article inventoryIkut current Google News Sitemap requirement
xhtml hreflangLocalized variant apabila Sitemap ialah chosen methodSetiap version list complete reciprocal set
Combined extensionsPage benar-benar layak untuk beberapa typeDeclare namespace sekali dan validate XML
NoneOrdinary page sudah discoverable dalam HTMLJangan tambah unsupported metadata untuk appearance

Submit location, bukan file contents

Search Console submission memberitahu Google lokasi hosted Sitemap; ia bukan upload XML kepada Google. File mesti kekal public dan fetchable. Successful submission bermaksud file boleh diprocess, bukan semua URL telah dicrawl, diindex atau rank.

MethodUse caseLimit
Search Console Sitemaps reportManual submission dengan fetch/parsing feedbackPerlu owner permission dan property scope tepat
robots.txt Sitemap linePersistent public declarationGunakan fully qualified URL; processing tidak dijamin
Search Console APIProgrammatic management untuk verified propertiesAutomation masih perlukan validation dan ownership
RSS/Atom dengan WebSubBroadcast recent publishing changeRecent feed bukan full inventory
Deprecated Ping endpointJangan gunaGoogle return 404 dan tiada useful signal

Baca Search Console pada level betul

Gunakan Sitemaps report untuk fetch history dan parsing error. Gunakan Page indexing report yang difilter kepada “All submitted pages” atau specific Sitemap untuk melihat cohort. Gunakan URL Inspection bagi representative URL, bukan extrapolate whole site daripada satu page.

Gap antara submitted dan indexed URL bukan automatic error. Redirect, duplicate, noindex dan removal sepatutnya tiada dalam clean Sitemap; valid page masih mungkin perlukan diagnosis quality, Canonical selection atau processing.

SoalanBest evidenceJangan simpulkan
Bolehkah Google fetch dan parse file?Sitemaps report status, last read dan errorSuccess bermaksud semua URL indexed
Submitted cohort mana tidak indexed?Page indexing filter by SitemapSetiap non-indexed URL ialah defect
Apa Google tahu tentang satu URL?URL Inspection indexed data dan live testLive test bermaksud sudah masuk index
Adakah generated output technically clean?XML parse dan URL inventory crawlValid XML bermaksud URL decisions betul
Adakah discovery bertambah baik?Comparable crawl/index cohort dan server logSubmission timestamp menyebabkan ranking gain

robots.txt mesti berada di exact host root

File mesti tersedia sebagai lowercase /robots.txt pada top level. Rules hanya terpakai kepada protocol, hostname dan port sama. File pada https://example.com tidak mengawal HTTP, www, subdomain lain atau nonstandard port.

Translated subfolder berkongsi host robots file; translated subdomain perlukan file sendiri. CDN atau application perlu return plain UTF-8 text, bukan login page, HTML error template atau redirect chain.

robots.txt locationMengawalTidak mengawal
https://example.com/robots.txtHTTPS URL pada example.com standard portHTTP, www, subdomain atau custom port
https://www.example.com/robots.txtwww HTTPS host sahajaApex atau shop.example.com
https://shop.example.com/robots.txtshop HTTPS subdomain sahajaMain site atau subdomain lain
https://example.com/folder/robots.txtBukan root robots policyURL di bawah /folder/
https://example.com:8443/robots.txtHost, protocol dan port itu sahajaStandard HTTPS port

Fahami group, matching dan supported field

ElementGoogle behaviorAudit risk
User-agentMulakan group; Google pilih most specific matching token dan combine duplicate matching groupGeneric group dianggap override specific group
DisallowBlock crawl request apabila path matchBroad prefix terkena useful URL
AllowPermit exception dalam broader DisallowException lebih pendek daripada blocking rule
Longest matchMost specific path menang; Allow menang same-length tieReviewer baca top-to-bottom sahaja
Path casingRule case-sensitiveLive URL capitalization berbeza
WildcardsGoogle support * dan end-anchor $Regex assumption menghasilkan wrong match
SitemapAbsolute location; tidak tied kepada user-agent groupRelative URL atau wrong host
Unsupported lineGoogle ignorecrawl-delay atau plugin directive dianggap universal

Mulakan dengan robots.txt paling kecil

Jika semua public content boleh dicrawl, absent file atau empty applicable Disallow sudah bermaksud allow. Allow: / biasanya tidak perlu. Tambah rule hanya untuk pattern yang deliberate, kemudian test representative allowed dan blocked URL.

Simple service site boleh gunakan satu User-agent: * group, block internal search-result path dan list satu absolute Sitemap index. Jangan copy obsolete WordPress admin rule selepas route sudah tidak wujud atau block CSS, JavaScript dan image untuk public page.

Robots rule review
  • Setiap Disallow mempunyai documented crawl-management purpose.
  • Rule match exact production case, slash dan parameter pattern.
  • Specific Allow exception berfungsi mengikut longest-match.
  • Tiada public page atau rendering asset blocked secara tidak sengaja.
  • Tiada rule menjadi security, Canonical atau noindex substitute.
  • Specific crawler group ikut published documentation crawler itu.
  • Sitemap line menggunakan final absolute production URL.
  • Staging rule tidak boleh disalin silently ke production.

Fahami kesan robots.txt response failure

robots.txt ialah operational infrastructure. Google biasanya cache sehingga 24 jam dan mungkin lebih lama jika refresh gagal. Perubahan memerlukan propagation time, manakala outage boleh mempengaruhi seluruh host.

ResponseGoogle-documented treatmentOperational response
2xxProcess valid rules diterimaCheck content type, encoding dan intended rules
3xxFollow sekurang-kurangnya lima redirect; selepas itu seperti 404Serve direct di canonical host root jika boleh
4xx kecuali 429Anggap tiada robots file dan tiada crawl restrictionJangan guna 401/403 untuk throttle
429Dikendalikan berbeza daripada ordinary 4xxReview capacity dan rate limiting
5xxPada awalnya stop crawling 12 jam; mungkin guna last good version sambil retryUrgent host reliability issue
DNS/network failureDianggap server errorFix DNS, TLS, edge atau availability
Lebih 500 KiBContent selepas limit diabaikanConsolidate rules dan restructure pattern
Cached old versionBoleh kekal sekitar 24 jam atau lebih semasa failureAllow propagation dan verify delivery

robots.txt tidak boleh remove atau secure content

KeperluanCorrect methodKenapa robots.txt gagal
Remove accessible HTML page dari Googlecrawlable meta robots noindexBlocked crawler tidak boleh baca page rule
Remove accessible PDF/non-HTMLcrawlable X-Robots-Tag noindex headerHTML meta tiada dan block sembunyikan header
Urgently hide result sementara durable fix disiapkanSearch Console Removals bersama durable noindex/removal/authRobots change sahaja tidak immediate atau durable
Protect customer, staging atau confidential dataAuthentication, authorization dan network controlrobots.txt public, advisory dan expose named path
Retire content tanpa replacement404/410 dan remove dari link/SitemapDisallow biarkan URL unresolved
Move content permanently301/308 ke closest equivalentDisallow ganggu processing move
Consolidate duplicateCanonical signal atau permanent redirectBlock menghalang Canonical signal dibaca

Generate mengikut WordPress, static site dan application

PlatformSource of truthRelease risk
WordPress corePublished public content dan native Sitemap jika sesuaiSEO/cache/multilingual plugin create second conflicting index
WordPress dengan SEO pluginSatu selected provider ikut final Canonical settingsSubmit native dan plugin inventory tanpa compare
Static site generatorBuild manifest untuk public indexable routeSetiap build tukar lastmod atau include utility page
Headless CMSPublished record digabung route, locale dan Canonical stateUnpublished atau orphan record bocor ke XML
Ecommerce/applicationProduct/category availability dan index-decision serviceFacet, session, sort parameter dan soft-deleted record
Multiple hostsPer-host inventory dengan verified cross-submission sahajaSatu robots file dianggap control semua subdomain

Protect WordPress-to-static migration

Migration sequence
  1. Export old Sitemap inventory, public crawl, Canonical, hreflang dan index directive.
  2. Map setiap old URL kepada unchanged route, true equivalent redirect atau justified 404/410.
  3. Protect staging dengan authentication dan exclude hostname daripada production Sitemap.
  4. Generate Sitemap daripada final published route manifest, bukan blind crawl.
  5. Compare old dan new preferred inventory ikut content type dan locale.
  6. Remove redirect, noindex, error, search result dan non-Canonical variant.
  7. Validate XML, child index, limit, response dan production hostname.
  8. Publish redirect, page, Sitemap dan robots.txt dalam release sama.
  9. Confirm production robots tidak mewarisi site-wide staging Disallow.
  10. Crawl semua old URL dan new Sitemap URL selepas launch.
  11. Submit stable Sitemap index dalam production Search Console property.
  12. Monitor submitted cohort, selected Canonical, server error dan organic landing page.

Diagnose symptom mengikut urutan

SymptomLikely layerEvidence pertama
Sitemap “Could not fetch”Access, DNS, redirect, content type atau property scopeDirect HTTP response dan report detail
XML parsing errorEncoding, escaping, namespace atau malformed markupRaw response dan XML validator
Submitted URL blocked robots.txtInventory dan crawl policy conflictExact entry dan matching rule
Submitted URL noindexPublishing/index decision conflictRendered/head response dan generator logic
Submitted URL redirectOld atau wrong Canonical inventoryRedirect destination dan route manifest
Different Google-selected CanonicalDuplicate atau inconsistent signalPage pair, links, Canonical, hreflang dan Sitemap
Important URL tiada SitemapGenerator, publishing state atau partition errorSource record dan child assignment
Large unsubmitted URL setFacet, parameter, old route atau crawler trapPage indexing filter, crawl dan log
robots changed tetapi test nampak oldCaching atau edge deliveryResponse header, host variant dan elapsed time
Traffic berubah selepas submitBukan proof Sitemap causationQuery, page, release, demand dan SERP cohort

Gunakan release gate, bukan visual spot-check

Production QA
  • robots.txt dan semua Sitemap HTTP 200 pada production host.
  • File UTF-8 dan XML parse dengan setiap namespace.
  • Child location absolute, unique dan fetchable.
  • Setiap listed page ialah 200, indexable, Canonical dan internally linked.
  • Tiada redirect, error, login, staging atau non-Canonical URL.
  • Locale cluster complete dan reciprocal apabila Sitemap hreflang digunakan.
  • lastmod omitted atau tied kepada meaningful source-controlled change.
  • robots rules pass allowed, blocked dan exception test.
  • Required rendering assets crawlable.
  • Sitemap index declared sekali dengan exact absolute URL.
  • Old WordPress URL ikut approved redirect map.
  • Search Console boleh fetch dan cohort monitoring mempunyai owner.

Mitos Sitemap dan robots.txt

  • “Semua Sitemap URL akan indexed.” Ia hint, bukan guarantee.
  • “Sitemap ganti internal link.” Orphan page masih architecture problem.
  • “priority 1.0 naikkan ranking.” Google ignore priority.
  • “changefreq=daily paksa daily crawl.” Google ignore changefreq.
  • “Fresh lastmod guarantee recrawl hari ini.” Ia berguna hanya jika accurate.
  • “Old Ping URL percepat submission.” Google deprecated dan return 404.
  • “robots.txt remove page dari Cari.” Blocked URL masih boleh indexed tanpa fetched content.
  • “Disallow protect confidential path.” File public dan tiada authorization.
  • “Block noindex page untuk extra certainty.” Block boleh halang noindex dibaca.
  • “Satu robots file control www, subdomain dan HTTP.” Scope ikut protocol, host dan port.
  • “Lebih banyak Disallow sentiasa save crawl budget.” Complexity boleh create bigger failure.
  • “Successful submission bermaksud SEO complete.” Ia file processing, bukan page quality atau ranking.

Soalan lazim

Perlukah setiap website XML Sitemap?

Tidak. Small comprehensively linked site mungkin ditemukan tanpa Sitemap. Namun ia berguna untuk launch, migration, multilingual inventory, specialized media dan monitoring.

Adakah Sitemap guarantee crawl atau index?

Tidak. Ia hint. URL masih perlu accessible, indexable, canonical, useful dan dipilih oleh Google.

Patut redirect atau noindex URL berada dalam Sitemap?

Tidak. Preferred inventory perlu exclude redirect, removal, noindex dan non-Canonical duplicate.

Berapa URL dalam satu Sitemap?

Maksimum 50,000 URL atau 50 MB uncompressed, mana yang dicapai dahulu. Gunakan child Sitemap dan index jika lebih besar.

Perlukah lastmod pada setiap URL?

Hanya jika system mampu memberi accurate last significant change date. Omit apabila confidence rendah.

Adakah priority dan changefreq membantu?

Tidak. Google menyatakan kedua-duanya diabaikan.

Patut noindex URL juga blocked?

Tidak. Google perlu crawl untuk membaca meta robots atau X-Robots-Tag noindex.

Bolehkah robots.txt protect staging?

Tidak. Gunakan authentication atau network access. Public Disallow bersifat advisory.

Di mana host robots.txt dan Sitemap?

robots.txt mesti di exact host root. Root-level Sitemap memberi scope mudah dan boleh declared dalam robots.txt serta Search Console.

Bagaimana monitor Sitemap?

Semak fetch/parsing dalam Sitemaps report, filter Page indexing ikut Sitemap, inspect representative URL dan compare cohort.

Rujukan rasmi

Perlukan langkah seterusnya?Selaraskan discovery, access dan index signals.

Kongsikan live Sitemap index, robots.txt, Search Console state dan URL pattern. Jack boleh membandingkan inventory dengan Canonical, response, locale route dan migration redirect.

Bincang technical SEO di WhatsApp

Jack Lee

Jack Lee

Building Cari Visibility with SEO, GEO & Laman Web Dibantu AI melalui projek dan eksperimen praktikal.