Measurement & Audit Protocol 5 menit

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

  1. Theme atau plugin update. Overwrite custom schema.
  2. CMS migration. Schema tidak ikut migrate.
  3. Developer deploy tanpa review. Schema commit broken.
  4. 3rd-party widget. Inject competing schema.
  5. Content writer remove schema field. Tidak sadar yang dihapus.
  6. SEO plugin update. Rewrite schema pattern lama.
  7. Caching issue. Stale schema di-serve.

Protocol monitoring

  1. Daily automated crawl 20-50 sample URL

    Script fetch URL, extract JSON-LD, compare ke baseline.

  2. Weekly full crawl seluruh domain

    Screaming Frog atau Sitebulb. Compare enhanced report GSC.

  3. Monthly Rich Results Test manual

    5-10 halaman critical. Verify rich result eligibility.

  4. Quarterly deep audit schema consistency

    Fact match antara schema dan body content.

  5. 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

IssueFirst response
Schema hilang di 1 halamanManual re-add. Deploy.
Schema hilang di semua halamanCheck theme / plugin update. Revert kalau perlu.
Warnings GSC increase gradualInvestigate within 1 week.
Errors GSC critical schemaFix within 24-48 jam.
Knowledge Panel hilangFull entity audit.
Baseline matters

Simpan baseline JSON schema setiap quarter. Diff terhadap baseline lebih actionable daripada spot-check. Baseline = known-good reference.