Changelog

Release Notes

Every feature, every improvement, every fix since v1.0.0.

Page 14 of 24 - 710 releases, newest first.

v2.65.47

Wizard Articles Get Their Images Automatically: One-Click AI Images Integration

  • The Content Wizard and the AI Images plugin now work as one system. The image plan the wizard writes for each article (the cover prompt and every in-content image prompt) is handed to the plugin at publish time, so the generated images match what the wizard planned for that specific article instead of a generic concept. In the wizard's final step, the Images card now enables the plugin with a single click - no detour through the Plugins page - and explains that an image-capable API key is required.
  • With the AI Images plugin set to generate at publish, the quality gate no longer blocks queue items whose planned images haven't been manually matched - the plugin is about to produce those images, so the "unresolved image marker" warning doesn't apply. When the plugin is off, the gate still protects the manual workflow exactly as before.
v2.65.46

Content Wizard Generation Is Now Reliable: Structured JSON Mode and a Bigger Output Budget

  • Starting generation in the Content Wizard could fail with "Could not extract valid JSON from the AI response". Server diagnostics showed the model's answer was being cut off mid-article: on Gemini 2.5, invisible reasoning tokens share the same output budget as the text, so long articles hit the ceiling and arrived truncated. Generation now requests the provider's structured JSON mode (the reply is guaranteed to be syntactically valid JSON, with no markdown fences), the output budget was doubled, and if a response still can't be parsed the wizard automatically retries once before reporting an error. The AI Draft screen uses the same JSON mode and a larger budget too.
v2.65.45

On/Off Switches Render Correctly in Every Settings Row

  • On/off toggle switches placed inside standard form rows could collapse: the track disappeared and the On/Off labels overlapped each other (visible for example on the "How this content was made" switch at the bottom of Settings → API). A general form style was overriding the switch layout; the component now always keeps its shape, everywhere in the admin. The affected row also got clearer spacing between its title and description.
v2.65.44

AI Draft Now Recognizes Your Saved Gemini Keys, and Generation Rotates Between Them

  • Content generation now honors your multiple Gemini keys: if a key hits its quota, is unauthorized, or has been revoked, jekcms automatically retries with the next key in your list - the same rotation the SEO analyzer already had. Previously only the first key was ever used for drafts and wizard articles.
  • On fresh installs, saving a Gemini API key in Settings → API and then opening the AI Draft screen still showed an "API key required" warning with the Generate button disabled - the settings form stores Gemini keys in the multi-key list, but the AI Draft screen (and the Content Studio status card) only looked at the old single-key field. Both now read the same key store the settings page writes to, so a key you saved is a key that works.
  • Generating a draft could be cut off mid-request on servers with a strict PHP time limit; the AI Draft screen now allows the same generous time window the Content Wizard already used.
v2.65.43

AI Draft Generation Works Again, and All Five AI Providers Are Now Fully Supported

  • Claude (Anthropic) and Cohere are now fully working AI providers for content generation. All five providers offered in Settings → API - Gemini, Groq, Cohere, OpenAI and Claude - generate drafts and wizard articles through the same client, each with a sensible default model.
  • The Content Wizard's article-generation endpoint now enforces the same license check as the wizard screen itself, and logs a diagnostic sample to the server log when an AI response cannot be parsed - making "could not extract JSON" reports actually debuggable.
  • The AI Draft screen's Generate button had been failing with a server error on every click since v2.28.0 - an internal file was loaded after the code that needed it. Generating a draft from a topic now works end-to-end again: the article is produced, previewed, and saved as a draft through the quality gate.
  • The Test button next to the Groq, OpenAI, Cohere and Claude API key fields used to reply "provider not wired" even for perfectly valid keys. It now performs a real test call against the selected provider - the same code path content generation uses, so a passing test means generation will work too.
  • With Cohere or Claude selected as the provider, the AI Draft screen claimed no API key was configured even when one was saved. Provider key lookup now covers all five providers.
  • Content pasted with a broken character encoding could make the AI request go out with an empty body, producing a baffling provider error. Invalid bytes are now cleaned before the request is built.
  • When AI features are disabled because of the site's license status, the editor now says exactly that and points to the license page - previously it claimed AI was "not configured", sending users to reconfigure settings that were fine.
  • AI task-specific settings (such as the SEO analyzer's larger response budget) were being overridden by the global defaults, which could truncate long analyses. Task settings now take precedence, and bulk SEO analysis now writes its suggestions in the site's content language rather than the admin panel language.
v2.65.42

SEO Preview in the Post Editor Now Always Shows Real Data

  • The search-result preview at the top of the SEO Settings box could render completely empty - just the URL, no title or description - whenever the SEO title and description fields were blank but an SEO record already existed for the post (for example after setting only a focus keyword). Your published page never had this problem: the site falls back to the post title and excerpt, but the preview didn't mirror that. The preview now uses the exact same fallback chain as the live site - SEO title → post title, SEO description → excerpt → content text - so it always shows what Google will actually see.
  • The preview also updates live now: typing in the post title, excerpt or slug immediately refreshes the preview (previously it only reacted to the SEO fields themselves), long titles and descriptions are truncated at Google's display limits, and the URL line follows your slug as you edit it.
v2.65.41

Archive Pages Now Emit Breadcrumbs and a Proper Listing Type

  • Category, tag and author archive pages now include BreadcrumbList structured data (Home › Category), so Google can show a breadcrumb trail under these pages in search results - previously only single posts had one. The archive pages are also now typed as CollectionPage instead of a generic WebPage, which more accurately tells search engines they are listing pages. Single posts and the homepage are unchanged.
v2.65.40

Heading Fixer Capitalizes Turkish Words Correctly

  • The Heading Fixer tool (Advanced SEO → Content) title-cases your headings, but it capitalized the first letter with a routine that follows English rules: a Turkish lower-case "i" became a dotless "I" instead of the correct dotted "İ". So on Turkish sites a heading like "içerik yönetimi" was turned into "Içerik Yönetimi" instead of "İçerik Yönetimi", and every word starting with i (izmir, internet, iş…) was mis-capitalized. Capitalization now follows the site's content language: Turkish sites get the correct İ/ı casing, English sites are unchanged (i → I). "ışık" → "Işık", "içerik" → "İçerik".
v2.65.39

A Failed Security Check No Longer Looks Like a Server Crash

  • When an admin action failed its CSRF security check - most commonly a benign case: you left a tab open long enough for the token to rotate - the server replied with HTTP status 419. That code is not part of the official HTTP standard, so Apache rewrote it to 500 on the way out, and the browser showed a scary "500 server error" for what was really just an expired token. The request is now rejected with the standard 403 Forbidden, which Apache passes through unchanged, so the admin gets the correct "please reload and try again" response and server logs stop showing phantom 500s. This affects every admin form and AJAX action, not only the SEO tools.
v2.65.38

Correct Social-Share Image Dimensions and Turkish Word Counts

  • The og:image:width / og:image:height tags were hardcoded to 1200×630 for every share image. Sites that use portrait featured images (common on recipe, pets and Pinterest-focused blogs) were telling Facebook, LinkedIn and Twitter the image was landscape, so the social-card preview came out cropped or letterboxed. The tags now report the image's real dimensions (read from the file), and are omitted entirely when the size can't be determined - a wrong size is worse than none.
  • Word counts and "X min read" estimates were computed with a routine that only understands the English A–Z alphabet, so Turkish letters (ü, ı, ğ, ş, ç, ö) were treated as word breaks - "güzel" counted as two words. This inflated the reading-time badge, the JSON-LD wordCount and the schema "time required" value by roughly 40% on Turkish sites. All of these now count whole Unicode words, matching the SEO analyzer, so the numbers are correct across the article, its structured data and every theme.
v2.65.37

Traffic Setup Score Reads 0% Until You Connect a Channel

  • After the previous fix, a brand-new site still showed 17% instead of 0%. The AI-crawler policy was being counted as a completed setup step, and since it defaults to "allow all," every fresh site got that one step for free. But that setting is about letting bots read your site (inbound), not about distributing your content (outbound), so it never belonged in the distribution setup score. It has been removed from the calculation - a site with nothing connected now reads 0%, and the score rises only as you actually connect social, Pinterest, IndexNow, WebSub or the newsletter. The AI policy is still shown in the card, just not counted.
v2.65.36

SEO and Setup Scores Start at 0 on a Fresh Site

  • The dashboard's Traffic Control ("Distribution setup score") showed 48% on a brand-new site with nothing configured. It was built as "100 minus penalties," and because the penalties never summed to 100 the score floored around 48 no matter what. It is now a true completion score - done setup steps ÷ applicable steps - so an unconfigured site reads 0% and rises as you connect social, Pinterest, IndexNow, WebSub and the newsletter. Queue/bounce errors are no longer mixed into the score; they stay in the issues list.
  • The single-post SEO analyzer showed 29/100 before you typed anything. Two categories scored full marks on a blank post: readability (an empty draft trivially has "no long paragraphs or sentences") and schema (a blank draft defaults to "auto"). Both are now only graded once there is real content, and a post with nothing entered reads 0. The posts list and the server-side recalculation were aligned the same way, so a blank post is 0 everywhere instead of 29 in the editor and 5 in the list.
  • The AI analysis endpoint returned a 500 error for a non-POST request; it now returns a clean 405 Method Not Allowed.
v2.65.35

A Professional Media Library: Drag to Select, Edit Alt Text Without Leaving the Page

  • WebP and AVIF quality are now configurable from settings, with safe universal defaults (WebP 82, AVIF 60). As before, uploaded JPEG/PNG files are converted to a modern format and the original is not kept, keeping your uploads folder lean.
  • The Media library now works like a modern media manager. Drag a rectangle across the grid to select several images at once, or Ctrl/Cmd-click to add and remove items individually. A floating action bar appears with the count and one-click Delete, so bulk actions no longer need the dropdown.
  • Each image has a pencil button that opens a slide-in panel where you can edit the title, alt text and caption without leaving the page - with a live character counter and guidance to keep alt text under ~125 characters. Images still missing alt text are marked with an "Alt missing" badge, and the badge clears the moment you add one.
  • The library header now shows WebP and AVIF support at a glance, plus how many items are still missing alt text or a caption, so accessibility and SEO gaps are easy to spot.
v2.65.34

Your FAQ Now Shows on the Page, and Autosave Is Calmer

  • The FAQ questions and answers you enter under Structured Data were only sent to search engines as hidden schema - they never appeared on the page for readers. They now render as a clean expand/collapse "Frequently Asked Questions" section at the end of the article, on every theme. (This also matches Google's own requirement that FAQ content be visible on the page.)
  • Autosave ran every 30 seconds, which was more often than needed and could collide with the editor switching a new post into draft-edit mode. It now runs every 2 minutes.
v2.65.33

URL Slugs Keep Turkish Letters When a Draft Is Saved

  • As you typed a title, the URL slug was built correctly ("Sokak Modası" → sokak-modasi). But the first time the draft was saved - by autosave or the Save button - the slug was rebuilt by a different, broken routine that dropped Turkish letters instead of converting them, turning sokak-modasi into sokak-modas. Because the editor then re-read that broken slug, a manual save kept it broken too. All slug generation now goes through the single correct routine that converts Turkish letters (ı→i, ş→s, ğ→g…) rather than dropping them.
v2.65.32

Checklist Boxes Line Up With Their Text

  • In a checklist, each checkbox sat slightly above its line of text. The box is now vertically centered on the first line of the item, so the list reads cleanly - and on a checklist item that wraps to two lines the box still lines up with the first line.
v2.65.31

Tables, Checklists and Captions Look Right on the Page

  • In the posts list, the row "Trash" action did nothing when clicked. The row's little form was nested inside the bulk-actions form, which browsers quietly ignore; the click is now handled correctly and the post moves to Trash. Restore, Delete and the "add sample content" button in the same list were affected the same way and are fixed too.
  • Tables written in the editor appeared on the page as plain text with no borders or spacing. They now have proper borders, a shaded header row and cell padding, and scroll sideways on narrow screens instead of overflowing.
  • Checklists (task lists) showed a bullet next to each checkbox with the text on a separate line. They now render as a clean checkbox and text on one line, with checked items struck through.
  • An image caption sat far below its image, looking disconnected. It now sits directly under the image, centered and quietly styled.
  • When a brand-new post was first saved automatically as a draft, the Revisions panel and the preview-link button did not appear until a manual reload - because the page was still showing its "new post" layout. The editor now switches to the full draft-editing view once the draft is saved, without interrupting your typing.
v2.65.30

Analytics Daily Totals No Longer Drift

  • ZeroTrack Analytics builds a daily summary from visited paths and referrers. If a single visit carried text in a broken encoding, saving that whole day's summary could fail. The summary now stores such values safely, so a day's totals are never lost to one unusual request.
v2.65.29

Analytics Reach Subfolder Installs - and Forms Never Crash

  • On a site installed in a subfolder, ZeroTrack Analytics silently recorded nothing: the visit beacon was sent to the domain root, where nothing answers. It now targets the install itself, so visits are counted wherever jekcms lives.
  • The newsletter, comment and contact forms answered with a server error when a field arrived in an unexpected shape. They now reject such input politely instead of failing the page.
  • Recipe schema times typed as plain numbers - "15" instead of the ISO form - were published as-is, which fails Google's Rich Results validation. Times are now normalised on output ("15", "15 min" and "15 dk" all become PT15M), and a value that cannot be understood is left out rather than published broken.
v2.65.28

What You Type in the SEO Panel Is What Google Sees

  • The social share image chosen in the post editor was saved but never shown: every theme kept using the featured image when a post was shared. The image you pick is now the one social networks display.
  • On the Lifestyle, News and Pets themes the SEO title you wrote was ignored - the browser tab and search results showed the plain post title instead. Lifestyle also ignored the SEO description. All three now honour the SEO panel.
  • On the Health theme, category, tag, search and author pages all carried the same title - just the site name. Each archive now gets its own descriptive title, as on the other themes.
  • A post whose SEO title field was cleared ended up with a browser-tab title that began with the separator, like " | My Site". It now falls back to the post title.
  • A featured image stored with an extra path prefix produced a broken image address and silently dropped the share image. The prefix is now corrected on the way out.
v2.65.27

Search Returns Posts, Not Legal Pages

  • Site search on the Lifestyle, Minimalist and Tech themes returned pages - privacy policy, terms, cookie policy - mixed in with blog posts, and counted them in the result total. Search now returns posts only, and the count matches. The Pets theme's "not found" page listed pages among its recent posts for the same reason.
  • A malformed request could make any page answer with a server error. Sending a form field in the wrong shape was enough; the page returned HTTP 500, which search engines read as "this page is broken". Such requests are now ignored instead of failing the page. The same applied to the login, contact and comment forms.
  • Content carrying an older character encoding - typically brought over from WordPress - could stop a meta description or a URL slug from being generated, which in turn could halt an import. The text is now repaired as it comes in.
  • Under the same conditions, media details, SEO analysis records and scheduled task logs could fail to save. They now store the repaired text instead of failing.
v2.65.26

The Dashboard Stops Counting Pages as Posts

  • The dashboard greeting could report posts you had not written. Publishing pages - the legal pages generator creates several at once - was counted as "5 posts published today", while the content calendar right below it correctly showed nothing for the same day. The greeting now counts posts only, so the two agree.
  • The "Scheduled" list on the dashboard also showed scheduled pages among the posts. It now lists posts only, matching the drafts list next to it.
v2.65.25

Author Selection Works - and Your SEO Fields Stay Put

  • The Author dropdown in the post editor was empty on a newly installed site, so there was no way to say who a post belongs to. It now lists everyone who can write on the site - the administrator included - and opens on the account you are signed in with.
  • When you did choose an author, your choice could be quietly replaced with a different writer on sites that have more than one. The name you pick is now the name that is saved.
  • Text carrying an older character encoding - most often content brought over from a WordPress site - could stop a post from saving, or let it save while silently discarding the whole SEO panel with it: meta title, description and focus keyword all disappeared without a word. Such text is now repaired as it comes in and the SEO fields are kept.
  • On installations served over a non-standard port, every save in the admin panel was refused as a security failure, which left the panel unusable. Ports are no longer part of that check.
  • A writer account could publish a post under someone else's name, and a post could be assigned to a deleted or subscriber account. Both are now rejected on the server.
v2.65.24

Your Logo Shows Up - and You Decide How Big

  • Görünüm → Customize now has a logo height control for the header and the footer. Each theme starts from a sensible default for its own header, and you can change it with a slider; the width follows automatically and the aspect ratio is never distorted.
  • A logo uploaded under Settings → Brand did not appear in the header or footer on several themes - the favicon, social share image and search-engine logo were all correct, only the site itself never showed it. Every theme now displays it.
  • Saving your profile failed with a server error whenever social links were filled in. Saved links were not being shown back to you either. Both are fixed.
v2.65.23

Sites Stay Crawlable When the Database Is Busy

  • On shared hosting the database refuses new connections once the account hits its simultaneous-connection ceiling. A page that hit that moment returned HTTP 500 - the code search engines read as "this page is broken", which costs indexing. Measured under a parallel crawl, 1.7% to 6.7% of requests were failing this way.
  • The connection is now retried briefly with a randomised backoff, so short collisions resolve invisibly. If the database is still unreachable, the page answers 503 with Retry-After instead of 500 - the signal that means "temporarily busy, come back" rather than "broken".
  • Error responses are no longer cacheable, so a CDN cannot keep serving an outage page after the site has recovered.
  • About page (travel theme): a stray backslash was printed in the "Popular topics" text.
v2.65.22

Footer Designer, Now in Every Theme

  • Appearance → Footer now opens the full footer designer in every theme: pick one of eight layouts, build your own columns (menu, categories, text, newsletter, contact, brand), set the brand block, social icons and bottom bar - with a live preview.
  • Previously only one theme had this; the other thirteen offered a handful of fields. The designer now lives in the core, so any theme gets it.
  • A footer saved before this release no longer changes your site on its own - the new designer only takes over once you save it yourself.
v2.65.21

Sidebar Label Fix

  • On Turkish installs the sidebar link for footer settings still read "Footer" instead of matching the tab name.
v2.65.20

Appearance → Footer Opens the Footer Settings Directly

  • Clicking Appearance → Footer bounced you to a different screen, which read as "this theme has no footer settings". The menu item now opens the footer settings directly, with no redirect in between.
  • The sidebar item was still labelled "Footer" in Turkish; it now matches the tab name, "Alt Bilgi".
v2.65.19

Footer Tab Is Visible Again

  • In every theme the Footer settings were folded into the Advanced panel, so clicking Appearance → Footer opened Advanced and no Footer tab was anywhere to be seen. Footer is now its own tab, right next to Menu.
  • Three tab labels in one theme were still in English.
v2.65.18

Menu and Footer Customization in Every Theme

  • Five themes - including the one new sites start with - opened an empty screen when you went to customise the menu or the footer. Every theme now has both.
  • The "Copyright text" field under Appearance → Footer was saved but never appeared on the site. It works now, and supports {year} and {site_name} placeholders.

Get your site live

The setup wizard gets a site live in about 30 minutes. See the prices and the free edition.

View Pricing
  • Setup and live in 30 minutes
  • 15 ready-made themes
  • AVIF/WebP image optimization
  • Automatic SEO - Sitemap, Schema.org
  • Cookieless built-in analytics (ZeroTrack)

Be the first to know

New features, release notes and CMS guides. We send a couple of emails a month.