Add article dates, brand OG image, launch SEO checklist
- Add datePublished/dateModified to Article JSON-LD on the 11 dated articles (curated once from EN, applied to all languages) - Replace og-default.jpg with the official brand OG image (1200x630) - Add docs/launch-seo-checklist.md (go-live steps: redirects, Search Console, analytics, rich-result validation, monitoring) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
6e8b8befe6
commit
788084e094
36 files changed
+154
-33
No files matched your search
@@ -0,0 +1,99 @@
|
||||
# Launch-day SEO checklist
|
||||
|
||||
Everything below is **blocked until the site goes live on the final domain
|
||||
`msosorg.com`** (it can't be done on the temp host `msos.spletnimojster.si`).
|
||||
Work top to bottom on launch day. The on-page/technical SEO is already done —
|
||||
this is the "flip the switch" list.
|
||||
|
||||
---
|
||||
|
||||
## 0. Before you flip the domain
|
||||
|
||||
- [ ] **Native-speaker proofread of MK + SI content.** All Macedonian/Slovene
|
||||
translations (blog post, about-us, timeline, meta descriptions) are
|
||||
AI-drafted and marked for review. Fix before indexing — quality counts.
|
||||
- [ ] Decide the **canonical domain**: with-`www` or bare `msosorg.com`.
|
||||
Everything is currently hard-coded to `https://msosorg.com` (bare, https).
|
||||
If you want `www`, tell me and I'll re-run the injector with the new base.
|
||||
|
||||
## 1. DNS + hosting
|
||||
|
||||
- [ ] Point `msosorg.com` DNS to the host.
|
||||
- [ ] Confirm a valid **HTTPS certificate** (Let's Encrypt / host-provided).
|
||||
- [ ] Confirm the site loads at `https://msosorg.com/en/` (and `/mk/`, `/si/`).
|
||||
|
||||
## 2. Redirects (`.htaccess`)
|
||||
|
||||
- [ ] Update the root redirect in `.htaccess` (lines 2–5): change
|
||||
`msos.spletnimojster.si` → `msosorg.com` so `/` → `/en/` on the real host.
|
||||
- [ ] Add a **301 from the temp domain to the final domain** so any links /
|
||||
early indexing on `msos.spletnimojster.si` pass equity to `msosorg.com`:
|
||||
```apache
|
||||
RewriteCond %{HTTP_HOST} ^(www\.)?msos\.spletnimojster\.si$ [NC]
|
||||
RewriteRule ^(.*)$ https://msosorg.com/$1 [R=301,L]
|
||||
```
|
||||
- [ ] Pick ONE host form (www vs non-www) and 301 the other to it.
|
||||
- [ ] (Ask me to make these edits — they're quick.)
|
||||
|
||||
## 3. Verify the technical layer resolves on the real domain
|
||||
|
||||
- [ ] `https://msosorg.com/robots.txt` loads and lists the sitemap.
|
||||
- [ ] `https://msosorg.com/sitemap.xml` loads (201 URLs, all `msosorg.com`).
|
||||
- [ ] Spot-check a page's `<link rel="canonical">` and `hreflang` point to
|
||||
`https://msosorg.com/...` (they do — just confirm live).
|
||||
- [ ] Hit a bad URL (e.g. `/en/blog/xxx`) → branded **404** with 404 status
|
||||
(works once the Apache `ErrorDocument` is live).
|
||||
|
||||
## 4. Google Search Console ← most important
|
||||
|
||||
- [ ] Add the property (prefer **Domain property** via DNS TXT — covers all
|
||||
subdomains + http/https).
|
||||
- [ ] Submit `https://msosorg.com/sitemap.xml`.
|
||||
- [ ] Use **URL Inspection** on the homepage + a couple key pages → *Request
|
||||
indexing*.
|
||||
- [ ] Check **International Targeting** → no hreflang errors.
|
||||
- [ ] Over the next weeks: watch **Coverage/Pages**, **Core Web Vitals**, and
|
||||
the **Performance** report.
|
||||
|
||||
## 5. Bing Webmaster Tools (optional, ~5 min)
|
||||
|
||||
- [ ] Add the site (can import from Search Console) and submit the sitemap.
|
||||
|
||||
## 6. Analytics (measure the SEO) — see `docs/` note / ask me to wire it
|
||||
|
||||
- [ ] Create the analytics account (GA4 or Plausible — recommendation below).
|
||||
- [ ] Give me the Measurement ID (GA4) or confirm the domain (Plausible); I add
|
||||
the snippet to `tools/seo_inject.py` so it lands on all 201 pages at once.
|
||||
- [ ] Verify real-time hits after deploy.
|
||||
|
||||
## 7. Social / rich-result validation
|
||||
|
||||
- [ ] **Rich Results Test** (search.google.com/test/rich-results) on a blog,
|
||||
news, and project URL → Article + BreadcrumbList detected, no errors.
|
||||
- [ ] **Facebook Sharing Debugger** — paste homepage + a blog URL, click
|
||||
*Scrape Again* → correct title/description/OG image.
|
||||
- [ ] **LinkedIn Post Inspector** — same check.
|
||||
- [ ] Confirm the favicon shows in a browser tab and in Google results.
|
||||
|
||||
## 8. Post-launch monitoring (first 2–4 weeks)
|
||||
|
||||
- [ ] Watch indexing count climb in Search Console.
|
||||
- [ ] Fix anything in Coverage (excluded/errors).
|
||||
- [ ] Re-check Core Web Vitals (image optimization + lazy-loading should keep
|
||||
these green).
|
||||
- [ ] Add fresh content (blog/news) — freshness + internal links help.
|
||||
|
||||
---
|
||||
|
||||
### Notes / gotchas
|
||||
|
||||
- **Custom 404** only works on the Apache/LiteSpeed host via `.htaccess`
|
||||
`ErrorDocument` (already added). The Python dev server ignores it.
|
||||
- **Re-run after any page add/rename/delete:**
|
||||
`python tools/seo_inject.py --all --sitemap` (keeps canonical, hreflang and
|
||||
the sitemap in sync).
|
||||
- **`images/original/`** (458 MB source masters) is gitignored — keep a
|
||||
Drive/local backup; it never deploys.
|
||||
- If the final domain or www-choice differs from `https://msosorg.com`, the
|
||||
`DOMAIN` constant in `tools/seo_inject.py` must be updated and the injector
|
||||
re-run — one-line change, ask me.
|
||||
Reference in new issue
Block a user