Changelog
Release Notes
Every feature, every improvement, every fix since v1.0.0.
Page 19 of 20 — 576 releases, newest first.
Newsletter Email: Branded Dark Header
Improved
- Email design now has a real branded identity — the previous version rendered too plain in clients that strip CSS backgrounds. The header is now a solid dark band with the brand wordmark and an accent eyebrow, plus a thin accent rule under it, a card frame, and a tinted footer band. Backgrounds use both inline CSS and
bgcolorattributes so the design survives in Gmail/Outlook. Auto-applied to system templates via a schema bump
Redesigned Newsletter Email Templates
Improved
- Professional, brand-consistent email templates — the newsletter emails (confirmation, welcome, campaign, unsubscribe, new-post) were replaced with a polished, English, email-safe design: a clean white card on a soft background, branded header with an accent eyebrow, strong typographic hierarchy, a proper rounded brand CTA button, and a complete footer (unsubscribe, website, copyright). Table-based + inline CSS for reliable rendering across email clients; all placeholders preserved
- Auto-applied across all installs via a plugin schema-version bump — system templates refresh automatically on the next load, while any template you customized is left untouched
Blog Editor: Featured Post & Empty-Content Fix
Fixed
- Blog post editor opened empty for the featured post — the editor treated
?id=0(the featured post, which carries id 0) as "new post" because of aid > 0check, so it never loaded it. It now loads any post when an id is present (0 included); a truly new post is one with no id parameter. Additionally, if a row's body is empty (legacy posts whose content lived only in the static blog data file), the editor pre-fills the form from that source by slug/id for review — saving persists it into the database (display-only, non-destructive, never overwrites existing edits)
Plugin System Restored on the Main Install (Newsletter Now Lists)
Fixed
- Newsletter (and all plugins) now appear in the plugin manager — the main install's bootstrap (cloned long ago from an older codebase) was entirely missing the plugin-loader block, so the plugin registrar never ran and no plugin could register itself. The block was restored, identical to the canonical source; the registrar now runs (with the self-healing plugin-table schema), so Newsletter registers automatically and is listed/activatable
Marketing Blog Editor Now Reachable in Admin
Fixed
- Blog posts are editable again — the bilingual marketing blog (the EN/TR posts shown on jekcms.com/blog) has its own admin editor that reads the same table the public blog uses, but it had no link in the admin menu, so it looked like the posts weren't manageable (the CMS Posts page only lists the separate site-content table). A "Blog Posts (jekcms.com)" entry was added to the admin sidebar — the existing posts are now listed and editable
Wizard Network Error, Profiles & Plugin Registration Fixed
Fixed
- "Network error" on Generate fixed — the wizard's generate step was missing on most installs, so the button failed with a network error. It now ships with every install and works on every site.
- Plugins now register on cloned installs — on installs cloned from an older database the
pluginstable could be missing newer columns, which made plugin registration fail silently — so the Newsletter plugin never appeared in the plugin manager. The scanner now self-heals the table schema, so Newsletter (and any new plugin) registers and is visible/activatable
Root Admin Fixes — Content Fixer, Newsletter Link, Wizard Keys
Fixed
- Content Fixer 404 fixed — the SEO Optimizer's Content/Heading Fixer page existed in the canonical source but was missing from the main install's admin, returning 404. It is now present
- Newsletter admin link corrected — the Newsletter plugin manifest pointed its admin page to a non-existent path; corrected so the dashboard opens from the plugin manager (the sidebar entry still requires the plugin to be activated)
- Wizard keys fixed on the main site too — the previous translation-key parity fix covered demo sites but missed the main install;
cq_assistant_*keys are now mirrored there as well, so the JSON Generation Wizard no longer shows raw keys
Content Queue Wizard — Raw Keys Fixed on All Sites
Fixed
- JSON Generation Wizard now reads properly on every site — the content-queue assistant translation keys (
cq_assistant_*) existed only on a couple of sites, so other sites showed raw keys like "cq_assistant_title" instead of labels. All sites now carry the full key set, mirrored byte-for-byte from the canonical source
Newsletter Signup Live on the Marketing Site
Fixed
- Newsletter subscription now works on jekcms.com — the footer "Subscribe" form was built but silently failed when the subscriber table did not exist. The handler now self-creates the table (idempotent, identical schema to the Newsletter plugin, so the plugin admin reads the same subscribers). Homepage stat figures also unified site-wide
Sub-Page SEO Audit — Documentation Title Fixed
Improved
- Documentation title is now descriptive & branded — the docs
was a bare "Documentation"; it is now "jekcms Documentation | Setup, Admin Guide, REST API & Automation" (and category/page docs titles now carry the brand). Stronger, unique titles for search - Full sub-page meta/SEO audit: every marketing sub-page verified to have a unique, bilingual (EN/TR) meta title and description, valid canonical + hreflang (en/tr/x-default) + Open Graph; no missing, empty or duplicate meta found
Accurate WordPress-Alternative Page (Verified Features Only)
Improved
- Stronger, honest "why jekcms vs WordPress" page — now built strictly from verified features: it maps the paid WordPress plugins jekcms replaces in its core (SEO/Yoast, internal linking/LinkWhisper, broken-link detection, AVIF media/ShortPixel, security/Wordfence, payments/WooCommerce), plus jekcms-only JSON bulk import and n8n+Gemini AI automation. Modern, readable, theme-consistent table; long-tail keyword focused; FAQ with FAQPage structured data
Fixed
- Removed an inaccurate capability claim — a "multi-site / fleet management" line was wrongly added to the comparison page, structured data and llms.txt. jekcms has no such product feature; it has been removed everywhere and replaced with verified, real capabilities only
No Orphan Pages — Full Internal Linking
Fixed
- No orphan pages — every public marketing page is now reachable via the footer + sitemap + clean URL with EN/TR variants. The "Report Piracy" page was orphaned (no link anywhere) and is now footer-linked and crawlable; the WordPress-alternative page was already footer-linked (verified)
AI-Search Visibility & WordPress-Alternative Positioning
Added
- WordPress Alternative comparison page — a new, honest
/wordpress-alternative(TR:/tr/wordpress-alternatifi) page with a factual jekcms-vs-WordPress table and FAQ (FAQPage structured data), sitemap + hreflang + footer-linked - llms.txt — a machine-readable summary at
/llms.txtso AI assistants can accurately describe jekcms as a self-hosted CMS / WordPress alternative
Improved
- Discoverable in AI search — AI answer/search engines (ChatGPT, Perplexity, Gemini, Claude, Copilot) are now explicitly allowed (server-level block removed for them; named robots groups added). Low-value SEO-scraper bots stay blocked
- Clearer entity for search & AI — structured data now classifies jekcms as a Content Management System with a precise CMS / WordPress-alternative description and feature list; site meta sharpened to say "self-hosted CMS / WordPress alternative" (factual, no keyword stuffing)
Marketing-Site SEO Hardening
Improved
- No duplicate page URLs — direct
.phphits (e.g./features.php) now 301-redirect to the clean URL (/features), so each page has a single indexable address and a single canonical - Single redirect hop —
http://wwwnow goes straight tohttps://non-www in one 301 instead of two chained redirects (faster, stronger SEO signal) - Audited & confirmed correct: error pages return real 404 (no soft-404, noindex), dynamic robots.txt with environment-aware sitemap, bilingual sitemap with hreflang, self-referencing canonical + en/tr/x-default hreflang,
?lang=tr→/tr/…301
Article Rendering & Internal-Link Integrity Fixes
Fixed
- Broken internal links repaired at the source — The auto internal linker could run over raw Markdown and inject a link inside a Markdown link, which the renderer then turned into corrupted, half-visible anchor markup. Markdown links/images are now protected, so internal linking can never mangle content again. The link cleaner was also hardened to fully remove any pre-existing corrupted/leaked link debris — re-running the internal-link scan on an affected site now self-heals old content
- Checklists render properly — Markdown task lists (
- [ ]/- [x]) now show real checkbox glyphs instead of literal "[ ]" text - Tables are styled — Markdown tables in articles now render with borders, padding and header styling instead of columns running together
- No more double bullets — list items showed both a default bullet and a custom marker; the duplicate is gone
- Related posts fixed — the related section rendered twice, once as full-width stacked images; the broken duplicate was removed, leaving the clean card grid
- Featured image aspect ratio — single-post cover images now use a proper 16:9 frame instead of a cropped near-square
- Table of contents shows accented characters correctly — the on-page contents list double-escaped HTML entities, showing things like "Güncel" instead of "Güncel"; titles are now decoded before display (anchors stay in sync)
- Front-end fixes now go live immediately — deploys purge the page cache, so a fix is no longer masked by up-to-5-minutes of stale cached HTML
JSON Wizard Rename & Calendar Visibility Fix
Improved
- "Content Assistant" renamed to "JSON Generation Wizard" — name now reflects what it actually does: builds a ready-to-import JSON + prompt
- "Continue below" marker is now built-in — typing
{devam}in a post renders a centred "content continues below" button that smooth-scrolls to the next section. It now lives in the core renderer (theme-independent), so theme resets can no longer wipe it - Checklist fix also covers articles already stored as HTML, not just Markdown
Fixed
- Content calendar fixed — schedule is visible again — On some installs the whole calendar silently came back empty: the underlying query referenced a column that older content-queue tables never had, so it failed and showed nothing. The query is now schema-independent and self-healing, and the month view also shows every scheduled item regardless of its state (draft / approved / in-progress / done), colour-coded by status
- Calendar hover preview used the wrong image field in one branch — corrected
Cleaner Content Queue Import Screen
Improved
- Content Queue → Import — Clearer visual separation between the AI Content Assistant and the import options (JSON / Google Sheets / CSV), so the two no longer run together on the page
- Removed the redundant static JSON and Google Sheets format reference blocks — the Assistant already generates a ready-to-use example, so the extra boilerplate only added clutter. Applied across every installation
Reliability, Security & Always-On Delivery
Added
- Two-Factor Authentication (TOTP) — Modern QR setup card in every site's Security settings. Scan with Google Authenticator / Authy / 1Password; self-hosted QR (no third party), with a manual key fallback. Login enforcement is fail-open by design — a 2FA glitch can never lock you out
- Zero-downtime auto-deploy — Updates now reach your site automatically within minutes of a release, over HTTPS, with a health check afterwards. No manual uploads, no SSH, no lockouts
Improved
- Faster pages — documentation/screenshot assets ~73% lighter, zero-layout-shift images
- Cleaner SEO — bilingual default meta description & footer fields, consistent schema name source
Fixed
- Site name in Google results — A long-standing settings storage issue made search engines fall back to the bare domain. Now every site shows its real configured name in titles, social cards and structured data — fleet-verified
- Stay signed in — Admin sessions no longer drop unexpectedly; they persist until you explicitly sign out (root cause: server session garbage-collection wasn't aligned with the configured lifetime)
- Footer & branding — Footer renders reliably and is driven from a single source in General Settings (slogan / footer text), bilingual (TR/EN) where applicable; placeholder/demo remnants removed
Two-Factor Auth, Smart Newsletter & Customer Update Channel
Added
- Admin two-factor authentication (TOTP) — Optional time-based 2FA with QR enrollment, enabled/disabled per account from Security settings; compatible with any authenticator app
- Smart newsletter digests — The subscription plugin can now send an automated weekly or monthly roundup of new posts (frequency off/weekly/monthly + day-of-month), reliably driven server-side via cron with per-period de-duplication
- Customer self-update channel — End-to-end signed update delivery: the update manifest is verified with an embedded public key so verification works on every install, SHA-256 is mandatory, and a one-command release packager builds a clean core package with a key-pair safety gate that refuses a mis-signed release
Fixed
- Critical SEO: archive pages no longer soft-404 — On the Tech & Minimalist themes every category/author archive returned a hard 404 (the template read a routing key that was never set); these pages now resolve correctly and author archives are fully supported
- API write authorization — An authenticated low-privilege token can no longer create/modify/delete content or touch another author's posts; role + ownership are enforced from the product's own capability model
- Sitemap/robots resilience — Security user-agent heuristics could return 403 to Googlebot/Search Console for
sitemap*.xml/robots.txt; these endpoints now bypass every blocking rule so indexing is never accidentally lost - Footer social links — The marketing footer now renders only the accounts configured in General Settings → Social Media (placeholder/demo links removed)
Security Hardening & Update Integrity
Fixed
- Critical: SSRF blocked — Server-side image fetch (media-from-URL) now allows only http/https public hosts; private/loopback/link-local and cloud-metadata addresses are rejected, redirects disabled, size-capped
- High: Markdown XSS blocked — Link/image URLs in content are scheme-allowlisted;
javascript:,data:,vbscript:and protocol-relative URLs can no longer reachhref/src - High: Cross-site request hardening — State-changing requests now also enforce same-origin (Origin/Referer) on top of the CSRF token, covering all admin action pages at once
- SVG upload XSS blocked — Uploaded SVGs containing scripts, event handlers, foreignObject, external refs or XML entities (XXE) are rejected; static SVGs still allowed
- Update integrity mandatory — Updates without a verified SHA-256 are refused; manual ZIP apply is off by default unless the official hash is provided; developer-license localhost detection now requires a real loopback connection
Core Web Vitals: Responsive Images, LCP & Caching
Improved
- Site-wide Image Optimization — Every front-end image now ships with intrinsic
width/height(zero layout shift / CLS),decoding="async"and lazy-loading, applied through a single global output filter that covers all themes. The hero/LCP image keepsfetchpriority="high"and is never lazy-loaded - Automatic Responsive Variants — Existing images are progressively back-filled with optimized AVIF/WebP size variants (thumbnail/medium/…), so cards and thumbnails download a small image instead of the full-resolution original — done gently in the background with no extra server load
- Faster First Paint — Instant-search CSS no longer blocks rendering (async with no-JS fallback); themes can ship a
critical.cssfor inlined above-the-fold styles - Browser Caching Restored — Front-end pages are cacheable again (back/forward cache works); only admin and API stay no-store
Clean Content Rendering: Markdown, Code Blocks & Encoding
Improved
- Newsletter Band Restyled — The pre-footer subscribe band dropped its generic blue gradient and now uses the site's own monochrome design tokens with pill controls — consistent in both light and dark themes
Fixed
- Critical: Raw Markdown Headings — When a post mixed HTML with Markdown (the normal output of AI/automation),
##/###headings, fenced code blocks and lists were printed literally instead of being rendered. The Markdown engine was rewritten so block elements are converted even alongside HTML - Critical: Shell Commands Became Headings — Code (fenced ``` / ~~~, inline, and existing
<pre>) is now protected before any heading parsing, so#shell comments and#!/bin/bashlines are never mistaken for titles - Legacy Linux Articles Repaired — WordPress-imported command blocks that had broken apart (
<pre>…</p><p>…</pre>) were rejoined into clean multi-line code blocks - Critical: Turkish Text Corruption (Mojibake) — Some automated content arrived double-encoded (Turkish letters shown as CJK glyphs, e.g. "Çikolata" → "脟ikolata"). The API now repairs every inbound write path automatically (self-validating, no false positives), and a fleet tool cleans existing content across all sites
Reliable Theme Switching, 17 Auto-Publish Networks & Full-Width Admin
Added
- Regional & Fediverse Auto-Publish — Eight new networks join the social automation engine: Pixelfed, Misskey/Sharkey, WriteFreely, Micro.blog and Lemmy (token/instance), VK (OAuth2), plus Hatena Bookmark and Plurk (OAuth1). Every connected account receives new posts automatically with per-platform pacing and back-off
- Honest Capability Notes — Networks without a safe, official publishing API (Xing, Naver, Nostr) are now clearly labelled with the reason instead of silently failing — no fake connectors
Improved
- Full-Width Connections Page — The social connections grid no longer caps at a narrow column; cards now use the full screen width on large displays instead of leaving the right third blank
Fixed
- Critical: Theme Switching Failed — Because
settings.keyis uniquely indexed, the old "UPDATE then INSERT-if-zero-rows" path threw a duplicate-key error whenever the value was unchanged (re-activating a theme, or the automatic previous-theme snapshot on every switch). The activation aborted with a database error and the theme never changed. Theme writes are now a single-row upsert (delete + insert) that also self-heals any pre-existing duplicate/stray rows. Active-theme reads are deterministic (canonical group, newest row) so the front-end always reflects the chosen theme
Smart Next-Gen CMS — Admin UI Overhaul, Bulletproof Slugs & Autosave
Added
- New Admin Design Language — Unified badge system (5 pill variants: success/danger/warning/info/neutral), stat-card-v2 with colored backgrounds + decorative SVG, quick-action outline buttons, state-block for empty/error states
- Language Toggle — TR/EN switcher in admin header with session-based override (
$_SESSION[admin_lang_override]), persists across navigation - Draft Autosave — Post editor saves every 30s + localStorage offline fallback. Status pill bottom-right: "Saving…" / "Saved · 15:42" / "Offline". Restore prompt on reopen if unsaved changes found
- Anonymous Preview —
preview.php?token=XXXwith 48-hex-char secret tokens stored inpost_meta. Click "Preview Link" button, URL auto-copied to clipboard. Orange banner indicates preview mode - Revision Diff — Click any revision → modal with word-level diff (jsdiff via CDN). Green additions / red strike-through deletions. "Restore this revision" with automatic snapshot
- Word Count Distribution — Dashboard shows stacked bar of post word counts (0-500, 500-1K, 1K-1.5K, 1.5K+) with hover tooltip
- Date Range Filter — Post listing has native date pickers for
date_from/date_to - Media Grid/List Toggle — Library view switches between grid and vertical list, preference saved to localStorage
- Slug repair tool — rebuild post addresses in bulk. Preview the result before anything changes, and clashing addresses are resolved instead of overwritten.
Fixed
- Critical: Turkish Slug Bug —
mb_strtolower()was convertingİ(U+0130) into composite sequences, breaking the transliteration map and leaving orphan bytes as hyphens. Newslugify()runsstrtrBEFORE lowercasing with comprehensive map (Turkish + Latin extended). Fixed 866 bad slugs across all sites - Sidebar Border Bug —
.sidebar-brandwas 56px but--header-height: 60px, creating a 4px misalignment visible as a horizontal line. Now usesvar(--header-height) - profile.php 90s Button —
.avatar-actions .btn-smhadborder-radius: 50%rendering buttons as blobs. Plus "Active" was hardcoded English in Turkish admin. Both fixed - Settings Thumbnail Inputs — Pixel inputs had no styling (native browser default — 90s). Now proper padding, focus ring, contained background
- Logo Regression —
logo-yatay.svgwas an obsolete test logo. Replaced withlogo-dikey.svg+ inline SVG in sidebar (matches admin login) - License Page Branding — Fake blue
[J]SVG monogram replaced with reallogo-dikey.svg. Hardcoded#28a745colors migrated to CSS variables - Updates Page UX — License inactive / update failed / up-to-date states use unified pill-badge format. Raw English errors removed from Turkish UI
Auto-Seed Settings, Core Web Vitals, Update System & SEO Hardening
Added
- Settings Auto-Seed —
ensure_default_settings()automatically seedssite_nameandsite_alternate_nameinto the database on first page load. Cache-file based, zero performance impact after initial run. No more manual SQL for new sites - Migration System —
migrations/5_seo_settings_seed.phpcreated across all sites. Update system can now distribute database changes automatically - LCP Eager Loading — First post card image on page 1 gets
loading="eager" fetchpriority="high"across all theme architectures. Expected ~200-500ms LCP improvement - CLS Prevention —
widthandheightattributes added to all post card images. Eliminates layout shift completely - CSS Cache Busting —
?v=THEME_VERSIONparameter added to stylesheet links in starter theme headers - Update Server Connected —
api/updates/check.phpnow uses realUpdateManagerwith database queries instead of static stub response. Graceful fallback on connection errors - jekcms Backlinks — All footer files across active sites, admin panels, and bundled themes now link to
jekcms.comwith "jekcms" anchor text andrel="noopener noreferrer" - Marketing SEO — Real favicon URL (SVG),
application-namemeta tag,theme-color, WebSite schemaalternateNameadded. Decorative text moved to CSS to prevent Google sitelink pollution
Fixed
- Sitemap pagination URLs removed —
?page=2,?page=3etc. no longer appear in homepage, category, tag, and author sitemaps. These thin pages wasted crawl budget - Thin tag pages now
noindex— Tag pages with fewer than 3 posts getnoindex, followviaoutput_robots_meta()to prevent thin content indexing - Markdown
# Headingnow renders as<h2>instead of<h1>— prevents double H1 on post pages where title is already H1 - SQL migration file
sql/v1.5.1-seo-site-names.sqldeleted — replaced by automaticensure_default_settings()mechanism - Marketing site favicon was data URI — Google requires real URL for SERP favicon display. Replaced with proper
/favicon.svg - Marketing site showed "Dashboard Posts Media Settings" as Google sitelinks — decorative text moved from HTML to CSS
content: attr(data-label)
Deep SEO Audit — Schema, OG Image, Core Web Vitals & Accessibility
Fixed
- BlogPosting
authorschema missingurlproperty — Google requires author URL since 2023. Addedauthor.urlpointing to/author/{slug}across all sites - BreadcrumbList last item missing
item(URL) property — Google Rich Results test was reporting errors. Fixed both category and non-category code paths across all sites og:image:widthandog:image:heightmeta tags missing in bundled theme functions.php files — Facebook/LinkedIn image previews could render incorrectly. Added 1200×630 dimensions- Featured/hero image missing
fetchpriority="high"in active theme single.php files — LCP (Largest Contentful Paint) performance impact. Also addedwidth/heightwhere missing - Author avatar
<img>tags had emptyalt=""in active theme files — accessibility and image SEO issue. Replaced with author name - Hardcoded
<html lang="tr">in affected themes — replaced with dynamicget_setting()for correct language declaration
SEO Audit — Pagination, Sitemap Language, Tag Cleanup & OG Locale
Fixed
- Pagination URL double query string bug —
?page=3?page=4caused byget_canonical_url()returning?page=N. Now strips page param from baseUrl before rebuilding - Schema
$currentUrlmissing?page=Non paginated pages — canonical and schema URLs now consistent ?page=1duplicate content — 301 redirect to clean URL added in all site .htaccess files- News sitemap hardcoded
<news:language>en</news:language>— now usesget_setting('general', 'site_language')dynamically across all sites - Tag URLs returning 301 to homepage — changed to proper 410 Gone response with minimal HTML page across all sites
- BlogPosting schema missing
inLanguageproperty — added dynamic language detection across all sites og:localehardcoded toen_USon Turkish sites — now dynamically set totr_TRoren_USbased on site language setting- AVIF → WebP schema image fallback missing
file_exists()check — WebP URL was emitted even when file didn't exist
Duplicate Prevention, Smart Thumbnails & Admin Tools
Added
Post::checkDuplicate()method — detects duplicate posts by title or slug before creation- Duplicate check integrated into all API webhooks:
webhookPublish,webhookSchedule,webhookDraft,webhookBulkPublish,webhookContentGenerate - HTTP 409 response with full existing post details (id, title, slug, status, url) when duplicate detected
force_duplicate: truerequest parameter to bypass duplicate check when intentional duplicates are needed- Bulk publish silently skips duplicates with
skippedcounter instead of blocking - Admin "Duplicates" button on Posts page — opens modal with full duplicate analysis
- Slug pattern detection engine: finds posts ending with
-N(N=1-10) where the base slug also exists as another post - Single-click and bulk "Trash All Duplicates" actions with real-time UI updates
- Image proxy fallback in
get_featured_image()— when pre-generated thumbnail files are missing, dynamically resizes viaimage-proxy.php - Size dimension map: thumbnail (400×400), card (480×300), medium (800×500), large (1600×1000)
- AVIF → WebP → original format cascade when looking up sized variants
- Content Queue sidebar badge now counts
queuedstatus alongsidedraftandready
Production Hardening — SEO Fixes, License Enforcement & Session Security
Added
output_robots_meta()function — per-page robot directives (noindex for 404, search pages; post-level override)- License enforcement in
init.phpandlogin.php— redirects tolicense.phpwhen no active license key is configured - Cross-site session hijacking prevention: cookie path scoped to site-specific URL path via
parse_url(SITE_URL, PHP_URL_PATH) - Session
_site_hashverification inAuth::loadUser()— prevents authenticated sessions from bleeding across co-hosted sites - Site-specific
remember_tokencookie path — remember-me tokens no longer shared between sites on same domain - Footer branding standardized across all installations
Fixed
- API upload path double
uploads/uploads/prefix —uploadFromUrl()anduploadFromBase64()now strip redundant prefix before saving to database - Duplicate
<link rel="canonical">tags removed from affected site headers where both inline andoutput_seo_head()emitted canonicals - FAQ schema output: enforced minimum 3 items with 50+ character answers, maximum 10 items, deduplicated across helpers
- Sidebar category post counts removed per design rules — "(5)" count display no longer appears in category listings
- Author name links converted from non-clickable
<span>to proper<a href>anchor tags in single.php files - Schema.org URLs stripped of tracking parameters (
utm_source,fbclid, etc.) viaparse_url() - Post card images missing
width/heightattributes — CLS prevention applied across affected sites
SEO Overhaul, Content Optimizer, Breadcrumbs & Table of Contents
Added
- Complete SEO overhaul across all active sites — meta tags, Open Graph, Twitter Cards, Schema.org structured data reviewed and standardized
- Breadcrumb navigation with Schema.org
BreadcrumbListmarkup added to every site - Table of Contents (TOC) — automatically generated from
<h2>/<h3>headings, renders as sidebar widget or inline block depending on theme - Content Optimizer with dictionary-based synonym refresh — replaces removed AI API (Gemini/Groq) approach that broke Turkish morphology
- Turkish synonym dictionary (~200 modern word pairs) and English synonym dictionary (~180 pairs) with archaic terms removed
- Auto language detection via
get_setting('general', 'ai_content_language')for optimizer dictionary selection - Google SERP site name fix:
??operator replaced with?:to catch empty strings inog:site_nameand WebSite schema <meta name="application-name">tag added to all theme headers for Google site name signal- Turkish slug generation fix:
generateSlug()now properly transliterates ç, ğ, ı, ö, ş, ü across all sites fix-slugs.phputility script for repairing existing corrupted Turkish slugs in production databases
Fixed
- robots.txt files had unresolved
{{SITE_DOMAIN}}placeholders in affected sites - CSP header in production was blocking Google Analytics, AdSense, and Facebook Pixel domains
Go live today
Setup, content management, SEO and image optimization — all in one platform. Get started in 30 minutes.
View Pricing- Setup and live in 30 minutes
- 14 ready-made themes
- AVIF/WebP image optimization
- Automatic SEO — Sitemap, Schema.org
- Cookieless built-in analytics (ZeroTrack)