GEO: FAQPage/NGO/Event schema + autonomous generation for new projects
Generative Engine Optimization pass so AI answer engines (ChatGPT, Gemini, Perplexity, AI Overviews) can confidently identify and cite MSOS. Schema (tools/seo_inject.py, propagated to all 231 pages): - FAQPage JSON-LD parsed from the /faq/ Q&A blocks (33 Q&A x EN/MK/SI) - Organization upgraded to NGO with entity-disambiguation fields: alternateName (all spellings), description, areaServed Slovenia, knowsLanguage, and foundingDate 2023-03-05 - Event JSON-LD on all 9 /projects/ recap pages (date + real location) Autonomous for future content (no code edits to add a project): - Event/Article dates auto-read from the English page's publish date; event city auto-detected from the body (Slovenian-city whitelist). ARTICLE_DATES/PROJECT_LOCATIONS are now optional overrides only. (Auto-detect corrected Paint & Wine to Nova Gorica.) - build_listings.py: auto-date fallback so undated new content still lists - pre-commit hook now runs seo_inject.py --all --sitemap first, then listings/botlinks, and re-stages changed pages (idempotent) Docs: docs/geo-offsite-worklist.md - copy-paste-ready off-site plan (Wikidata, Wikipedia fixes, directories, Google Business, AI-visibility tests). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
43847ba935
commit
0d49293693
239 files changed
+825
-319
No files matched your search
@@ -74,7 +74,11 @@ def collect_items(lang):
|
||||
date = DATES.get(key, {})
|
||||
iso = date.get("published") or date.get("modified")
|
||||
if not iso:
|
||||
continue # only list dated content
|
||||
# Autonomous fallback: read the date straight off the English
|
||||
# page, so new content lists without an ARTICLE_DATES entry.
|
||||
iso = seo_inject.extract_publish_date(seo_inject.en_content_for(key))
|
||||
if not iso:
|
||||
continue # only list genuinely dated content
|
||||
html = io.open(page, encoding="utf-8").read()
|
||||
h1 = H1_RE.search(html)
|
||||
title = strip_tags(h1.group(1)) if h1 else slug
|
||||
|
||||
Reference in new issue
Block a user