Add technical SEO foundation, MK/SI about-us + timeline, content fixes

SEO (all 201 pages, en/mk/si):
- Inject canonical, hreflang (en/mk/sl + x-default), Open Graph, Twitter
  cards and Organization JSON-LD via idempotent SEO:START/END block
- Generate multilingual sitemap.xml (xhtml:link alternates) + robots.txt
- Curated meta descriptions for lead-less pages (home, become-a-member,
  faq, news hub, my-route); every page now has a description
- Absolute URLs target final domain msosorg.com, not the temp host
- Add reusable tools/seo_inject.py (+ README)

Content fixes:
- Translate about-us and timeline-and-milestones into MK + SI, wire up
  their pages, and repair the previously-dead "Who We Are" nav links
  across all mk/si pages
- Remove duplicate en/projects/makedonska-studentska-vecer-vo-ljubljana
  (unreferenced; already covered by macedonian-student-night-in-ljubljana)

Locale correctness:
- Normalise Slovene pages to <html lang="sl"> (correct ISO 639-1)
- Map sl->si in main.js so the language-switcher highlight and newsletter
  i18n keep working on Slovene pages (data-lang="si" still maps to /si/)

MK/SI translations and descriptions are AI-drafted; flag for native review.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
popovskikandClaude Opus 4.8 committed 2026-08-02 11:43:10 +02:00
1 parent 31487ad83e
commit b393859467
208 files changed
+8319 -1388

No files matched your search

+26
View File
@@ -0,0 +1,26 @@
# tools/
## seo_inject.py
Injects a technical-SEO block into every language page (`en|mk|si/**/index.html`)
and regenerates `sitemap.xml` + `robots.txt`. Safe to re-run — the block lives
between `<!-- SEO:START -->` and `<!-- SEO:END -->` and is replaced in place.
The block adds: `meta description` (auto-extracted from the page's lead/subtitle
where available), `canonical`, `hreflang` alternates (en / mk / **sl** / x-default),
Open Graph, Twitter Card, and an Organization JSON-LD.
All absolute URLs point at the **final** domain `https://msosorg.com` (not the
temporary host), so nothing needs rewriting at launch. Note: the Slovene folder
is `/si/` but the ISO code is `sl` — the script maps `si → sl` for hreflang/locale.
### Usage
```sh
python tools/seo_inject.py # dry run: print the block for pilot pages
python tools/seo_inject.py --all # write the block into every page
python tools/seo_inject.py --all --sitemap # also rebuild sitemap.xml + robots.txt
```
Run `--all --sitemap` after adding, renaming, or deleting any page so canonical
tags, hreflang alternates, and the sitemap stay in sync.