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:
popovskikandClaude Opus 4.8 committed 2026-08-07 22:17:03 +02:00
1 parent 43847ba935
commit 0d49293693
239 files changed
+825 -319

No files matched your search

@@ -41,7 +41,7 @@
<meta name="twitter:title" content="A Table Full of Macedonia - MSOS">
<meta name="twitter:description" content="The food matters, but so do the order of the plates, the people around them, and the fact that nobody leaves after the first course.">
<meta name="twitter:image" content="https://msosorg.com/images/macedonia-food-shared-table-hero.webp">
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Macedonian Student Organisation in Slovenia","alternateName":"MSOS","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"]}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"NGO","name":"Macedonian Student Organisation in Slovenia","alternateName":["MSOS","Macedonian Students Organization Slovenia","Macedonian Student Organisation in Slovenia","Македонска студентска организација во Словенија","Makedonska študentska organizacija v Sloveniji"],"description":"The first official Macedonian student organisation in Slovenia — support, events, community and a voice for Macedonian students from application to graduation.","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"areaServed":{"@type":"Country","name":"Slovenia"},"knowsLanguage":["mk","sl","en"],"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"],"foundingDate":"2023-03-05"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"A Table Full of Macedonia","description":"The food matters, but so do the order of the plates, the people around them, and the fact that nobody leaves after the first course.","image":"https://msosorg.com/images/macedonia-food-shared-table-hero.webp","inLanguage":"en","author":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","url":"https://msosorg.com/en/"},"publisher":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","logo":{"@type":"ImageObject","url":"https://msosorg.com/images/1-logo.png"}},"mainEntityOfPage":"https://msosorg.com/en/get-to-know-macedonia/a-table-full-of-macedonia/"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://msosorg.com/en/"},{"@type":"ListItem","position":2,"name":"Get to know Macedonia","item":"https://msosorg.com/en/get-to-know-macedonia/"},{"@type":"ListItem","position":3,"name":"A Table Full of Macedonia","item":"https://msosorg.com/en/get-to-know-macedonia/a-table-full-of-macedonia/"}]}</script>
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
@@ -41,7 +41,7 @@
<meta name="twitter:title" content="History You Can Still Walk Through - MSOS">
<meta name="twitter:description" content="Stobi, Heraclea, Kokino, and Krusevo do not belong to the same century or tell the same story. That is exactly why they belong in the same journey.">
<meta name="twitter:image" content="https://msosorg.com/images/macedonia-heritage-stobi-street-hero.webp">
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Macedonian Student Organisation in Slovenia","alternateName":"MSOS","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"]}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"NGO","name":"Macedonian Student Organisation in Slovenia","alternateName":["MSOS","Macedonian Students Organization Slovenia","Macedonian Student Organisation in Slovenia","Македонска студентска организација во Словенија","Makedonska študentska organizacija v Sloveniji"],"description":"The first official Macedonian student organisation in Slovenia — support, events, community and a voice for Macedonian students from application to graduation.","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"areaServed":{"@type":"Country","name":"Slovenia"},"knowsLanguage":["mk","sl","en"],"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"],"foundingDate":"2023-03-05"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"History You Can Still Walk Through","description":"Stobi, Heraclea, Kokino, and Krusevo do not belong to the same century or tell the same story. That is exactly why they belong in the same journey.","image":"https://msosorg.com/images/macedonia-heritage-stobi-street-hero.webp","inLanguage":"en","author":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","url":"https://msosorg.com/en/"},"publisher":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","logo":{"@type":"ImageObject","url":"https://msosorg.com/images/1-logo.png"}},"mainEntityOfPage":"https://msosorg.com/en/get-to-know-macedonia/history-you-can-still-walk-through/"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://msosorg.com/en/"},{"@type":"ListItem","position":2,"name":"Get to know Macedonia","item":"https://msosorg.com/en/get-to-know-macedonia/"},{"@type":"ListItem","position":3,"name":"History You Can Still Walk Through","item":"https://msosorg.com/en/get-to-know-macedonia/history-you-can-still-walk-through/"}]}</script>
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
+1 -1
View File
@@ -41,7 +41,7 @@
<meta name="twitter:title" content="Get to know Macedonia - MSOS">
<meta name="twitter:description" content="Macedonia is not only a place on the map. It is a table that always has room for one more person, music that brings everyone closer, mountains on the horizon…">
<meta name="twitter:image" content="https://msosorg.com/images/og-default.jpg">
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Macedonian Student Organisation in Slovenia","alternateName":"MSOS","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"]}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"NGO","name":"Macedonian Student Organisation in Slovenia","alternateName":["MSOS","Macedonian Students Organization Slovenia","Macedonian Student Organisation in Slovenia","Македонска студентска организација во Словенија","Makedonska študentska organizacija v Sloveniji"],"description":"The first official Macedonian student organisation in Slovenia — support, events, community and a voice for Macedonian students from application to graduation.","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"areaServed":{"@type":"Country","name":"Slovenia"},"knowsLanguage":["mk","sl","en"],"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"],"foundingDate":"2023-03-05"}</script>
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="shortcut icon" href="/favicon.ico">
@@ -41,7 +41,7 @@
<meta name="twitter:title" content="Music, Dance and the Moments That Bring Us Together - MSOS">
<meta name="twitter:description" content="In Macedonia, music is often not something performed in front of a room. It is what changes the room and brings people into the same rhythm.">
<meta name="twitter:image" content="https://msosorg.com/images/macedonia-culture-oro-celebration-hero.webp">
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Macedonian Student Organisation in Slovenia","alternateName":"MSOS","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"]}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"NGO","name":"Macedonian Student Organisation in Slovenia","alternateName":["MSOS","Macedonian Students Organization Slovenia","Macedonian Student Organisation in Slovenia","Македонска студентска организација во Словенија","Makedonska študentska organizacija v Sloveniji"],"description":"The first official Macedonian student organisation in Slovenia — support, events, community and a voice for Macedonian students from application to graduation.","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"areaServed":{"@type":"Country","name":"Slovenia"},"knowsLanguage":["mk","sl","en"],"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"],"foundingDate":"2023-03-05"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"Music, Dance and the Moments That Bring Us Together","description":"In Macedonia, music is often not something performed in front of a room. It is what changes the room and brings people into the same rhythm.","image":"https://msosorg.com/images/macedonia-culture-oro-celebration-hero.webp","inLanguage":"en","author":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","url":"https://msosorg.com/en/"},"publisher":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","logo":{"@type":"ImageObject","url":"https://msosorg.com/images/1-logo.png"}},"mainEntityOfPage":"https://msosorg.com/en/get-to-know-macedonia/music-dance-and-the-moments-that-bring-us-together/"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://msosorg.com/en/"},{"@type":"ListItem","position":2,"name":"Get to know Macedonia","item":"https://msosorg.com/en/get-to-know-macedonia/"},{"@type":"ListItem","position":3,"name":"Music, Dance and the Moments That Bring Us Together","item":"https://msosorg.com/en/get-to-know-macedonia/music-dance-and-the-moments-that-bring-us-together/"}]}</script>
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
@@ -41,7 +41,7 @@
<meta name="twitter:title" content="Ohrid, More Than a Postcard - MSOS">
<meta name="twitter:description" content="The lake attracts the first look. The old streets, wooden houses, churches, neighbourhoods, and evening conversations are what make people return.">
<meta name="twitter:image" content="https://msosorg.com/images/macedonia-ohrid-kaneo-hero.webp">
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Macedonian Student Organisation in Slovenia","alternateName":"MSOS","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"]}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"NGO","name":"Macedonian Student Organisation in Slovenia","alternateName":["MSOS","Macedonian Students Organization Slovenia","Macedonian Student Organisation in Slovenia","Македонска студентска организација во Словенија","Makedonska študentska organizacija v Sloveniji"],"description":"The first official Macedonian student organisation in Slovenia — support, events, community and a voice for Macedonian students from application to graduation.","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"areaServed":{"@type":"Country","name":"Slovenia"},"knowsLanguage":["mk","sl","en"],"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"],"foundingDate":"2023-03-05"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"Ohrid, More Than a Postcard","description":"The lake attracts the first look. The old streets, wooden houses, churches, neighbourhoods, and evening conversations are what make people return.","image":"https://msosorg.com/images/macedonia-ohrid-kaneo-hero.webp","inLanguage":"en","author":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","url":"https://msosorg.com/en/"},"publisher":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","logo":{"@type":"ImageObject","url":"https://msosorg.com/images/1-logo.png"}},"mainEntityOfPage":"https://msosorg.com/en/get-to-know-macedonia/ohrid-more-than-a-postcard/"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://msosorg.com/en/"},{"@type":"ListItem","position":2,"name":"Get to know Macedonia","item":"https://msosorg.com/en/get-to-know-macedonia/"},{"@type":"ListItem","position":3,"name":"Ohrid, More Than a Postcard","item":"https://msosorg.com/en/get-to-know-macedonia/ohrid-more-than-a-postcard/"}]}</script>
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
@@ -41,7 +41,7 @@
<meta name="twitter:title" content="Skopje, A City of Many Layers - MSOS">
<meta name="twitter:description" content="A city best understood by crossing the river, changing neighbourhoods, and noticing what each period left behind.">
<meta name="twitter:image" content="https://msosorg.com/images/macedonia-skopje-stone-bridge-hero.webp">
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Macedonian Student Organisation in Slovenia","alternateName":"MSOS","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"]}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"NGO","name":"Macedonian Student Organisation in Slovenia","alternateName":["MSOS","Macedonian Students Organization Slovenia","Macedonian Student Organisation in Slovenia","Македонска студентска организација во Словенија","Makedonska študentska organizacija v Sloveniji"],"description":"The first official Macedonian student organisation in Slovenia — support, events, community and a voice for Macedonian students from application to graduation.","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"areaServed":{"@type":"Country","name":"Slovenia"},"knowsLanguage":["mk","sl","en"],"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"],"foundingDate":"2023-03-05"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"Skopje, A City of Many Layers","description":"A city best understood by crossing the river, changing neighbourhoods, and noticing what each period left behind.","image":"https://msosorg.com/images/macedonia-skopje-stone-bridge-hero.webp","inLanguage":"en","author":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","url":"https://msosorg.com/en/"},"publisher":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","logo":{"@type":"ImageObject","url":"https://msosorg.com/images/1-logo.png"}},"mainEntityOfPage":"https://msosorg.com/en/get-to-know-macedonia/skopje-a-city-of-many-layers/"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://msosorg.com/en/"},{"@type":"ListItem","position":2,"name":"Get to know Macedonia","item":"https://msosorg.com/en/get-to-know-macedonia/"},{"@type":"ListItem","position":3,"name":"Skopje, A City of Many Layers","item":"https://msosorg.com/en/get-to-know-macedonia/skopje-a-city-of-many-layers/"}]}</script>
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
@@ -41,7 +41,7 @@
<meta name="twitter:title" content="Welcome to Macedonia - MSOS">
<meta name="twitter:description" content="A country of mountains, open tables, long conversations, and stories that remain close wherever we go.">
<meta name="twitter:image" content="https://msosorg.com/images/macedonia-welcome-skopje-square-hero.webp">
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Macedonian Student Organisation in Slovenia","alternateName":"MSOS","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"]}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"NGO","name":"Macedonian Student Organisation in Slovenia","alternateName":["MSOS","Macedonian Students Organization Slovenia","Macedonian Student Organisation in Slovenia","Македонска студентска организација во Словенија","Makedonska študentska organizacija v Sloveniji"],"description":"The first official Macedonian student organisation in Slovenia — support, events, community and a voice for Macedonian students from application to graduation.","url":"https://msosorg.com/en/","logo":"https://msosorg.com/images/1-logo.png","email":"info@msosorg.com","address":{"@type":"PostalAddress","streetAddress":"Masarykova cesta 24","postalCode":"1000","addressLocality":"Ljubljana","addressCountry":"SI"},"areaServed":{"@type":"Country","name":"Slovenia"},"knowsLanguage":["mk","sl","en"],"sameAs":["https://www.facebook.com/msos.org","https://www.instagram.com/msosorg_com","https://www.linkedin.com/company/msos-org","https://www.youtube.com/@msosorg"],"foundingDate":"2023-03-05"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"Welcome to Macedonia","description":"A country of mountains, open tables, long conversations, and stories that remain close wherever we go.","image":"https://msosorg.com/images/macedonia-welcome-skopje-square-hero.webp","inLanguage":"en","author":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","url":"https://msosorg.com/en/"},"publisher":{"@type":"Organization","name":"Macedonian Student Organisation in Slovenia","logo":{"@type":"ImageObject","url":"https://msosorg.com/images/1-logo.png"}},"mainEntityOfPage":"https://msosorg.com/en/get-to-know-macedonia/welcome-to-macedonia/"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://msosorg.com/en/"},{"@type":"ListItem","position":2,"name":"Get to know Macedonia","item":"https://msosorg.com/en/get-to-know-macedonia/"},{"@type":"ListItem","position":3,"name":"Welcome to Macedonia","item":"https://msosorg.com/en/get-to-know-macedonia/welcome-to-macedonia/"}]}</script>
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">