Schema Monitoring: Deteksi Drift dan Broken Schema
Schema.org di production sering diam-diam rusak (developer deploy, theme update). Protocol monitoring untuk detect cepat.
Schema.org rusak silently. Tidak ada error di UI, user tidak notice, tapi Google stop menampilkan rich result dan Knowledge Panel bisa degrade. Monitoring proactive = catch masalah sebelum impact visible.
Sumber drift
- Theme atau plugin update. Overwrite custom schema.
- CMS migration. Schema tidak ikut migrate.
- Developer deploy tanpa review. Schema commit broken.
- 3rd-party widget. Inject competing schema.
- Content writer remove schema field. Tidak sadar yang dihapus.
- SEO plugin update. Rewrite schema pattern lama.
- Caching issue. Stale schema di-serve.
Protocol monitoring
- Daily automated crawl 20-50 sample URL
Script fetch URL, extract JSON-LD, compare ke baseline.
- Weekly full crawl seluruh domain
Screaming Frog atau Sitebulb. Compare enhanced report GSC.
- Monthly Rich Results Test manual
5-10 halaman critical. Verify rich result eligibility.
- Quarterly deep audit schema consistency
Fact match antara schema dan body content.
- Alert setup di GSC untuk Enhancement errors
Email immediate.
Automation script (Python)
# Minimal schema monitoring script
import requests, json
from bs4 import BeautifulSoup
URLS = [
'https://hibranwar.com/',
'https://hibranwar.com/about/',
'https://hibranwar.com/work/',
'https://ptarsindo.com/',
'https://witanabe.com/',
]
def extract_schema(url):
r = requests.get(url, timeout=10)
soup = BeautifulSoup(r.text, 'html.parser')
scripts = soup.find_all('script', type='application/ld+json')
schemas = []
for s in scripts:
try:
schemas.append(json.loads(s.string))
except:
pass
return schemas
def health_check(schemas):
issues = []
for s in schemas:
if '@context' not in s:
issues.append('Missing @context')
if '@type' not in s and '@graph' not in s:
issues.append('Missing @type or @graph')
return issues
for url in URLS:
schemas = extract_schema(url)
issues = health_check(schemas)
if issues:
print(f'{url}: {issues}')
else:
print(f'{url}: OK ({len(schemas)} schemas)')
Red flags to monitor
- Jumlah schema per halaman turun.Theme mungkin strip schema.
- @id yang broken atau berubah.Cross-page reference hilang.
- Canonical URL di schema tidak match current URL.Migration atau typo.
- Image URL di schema return 404.Broken asset reference.
- sameAs URL return redirect atau 404.External link rot.
- Date fields berubah format atau jadi kosong.Plugin conflict.
Response playbook
| Issue | First response |
|---|---|
| Schema hilang di 1 halaman | Manual re-add. Deploy. |
| Schema hilang di semua halaman | Check theme / plugin update. Revert kalau perlu. |
| Warnings GSC increase gradual | Investigate within 1 week. |
| Errors GSC critical schema | Fix within 24-48 jam. |
| Knowledge Panel hilang | Full entity audit. |
Simpan baseline JSON schema setiap quarter. Diff terhadap baseline lebih actionable daripada spot-check. Baseline = known-good reference.