Zen Blogger adds two widgets to Elementor: Blog Carousel and Posts. Both draw the same card and share the same query builder, so a layout you design once works either way.
Turning autoplay on adds a play/pause button — you can move it or make it appear on hover, but you cannot delete it, because moving content with no way to stop it fails WCAG 2.2.2. Arrows and the play/pause control are real buttons at a 44px target. Slides carry proper carousel semantics, keyboard control is on by default, and visitors whose system asks for reduced motion get no autoplay and instant transitions.
The carousel runs on the Swiper library Elementor already loads, so no additional slider script is added to the page. Nothing is enqueued on pages that do not use the widget. Images in the first visible row load eagerly with high fetch priority and everything after them loads lazily, and the image box reserves its aspect ratio up front so the carousel does not shift your layout while it loads. If the script never runs, the markup stays a scroll-snapping row instead of collapsing.
Filter by post type, taxonomy (include and exclude, combined with AND or OR), author, date range, and custom field ordering. Show posts related to the post being viewed, hand-pick them, or reuse the archive’s own query. Exclude the current post, skip posts already shown by another carousel on the page, or require a featured image.
Grid, masonry, list, or a feature layout where the first post spans wider. Pagination is page numbers, previous/next, a Load More button, or infinite scroll — and every one of them starts life as a real link, so the widget works with JavaScript disabled and every page stays crawlable.
When a page of results is fetched in the background:
aria-busy while it loads.The optional search-and-filter bar is a real form. It offers only the terms present in the posts the widget is showing, and reflects the current selection with aria-current.
Every text label the widget renders is an editable field, and every colour, font, size, spacing, border, radius and shadow is an Elementor control.
Slide, fade, coverflow, cards and creative effects; free scroll and a continuous ticker mode; multiple rows; centred slides; dots, dynamic dots, a fraction counter, a progress bar or a draggable scrollbar.
Every colour, font, size, spacing, border, radius and shadow is an Elementor control — including hover and focus states. Nothing is hard-coded, and no colour is applied as a default you cannot switch off.
Every slide is rendered server-side as a real <a href> inside an <article>, with a selectable heading tag and a machine-readable <time datetime>. Search engines and AI crawlers read the entire list from the page source — nothing is fetched by JavaScript, and nothing is hidden behind an interaction.
The carousel also describes itself as a schema.org ItemList in JSON-LD, either as positions and URLs or with full post details (headline, image, dates, author) under BlogPosting, Article, NewsArticle, CreativeWork or Product. That is what lets a search engine treat the section as an ordered list of articles rather than a cluster of links, and gives generative engines an unambiguous reading of what the section contains and in what order. Set it to None if your SEO plugin already outputs an ItemList for the same section.
If Zen GEO is installed, the two plugins share their structured data:
<head>; Zen Blogger prints its list where the widget renders. They never overwrite each other.permalink#article), so a post described in a carousel and the same post described by Zen GEO on its own page resolve to one node instead of two competing descriptions of the same URL.isPartOf, so the output reads as one connected graph.zenblog_zengeo_integration filter.Neither plugin requires the other.
zenblog_query_args — modify the WP_Query arguments before the query runs.zenblog_schema_graph — alter the JSON-LD graph, or return an empty array to suppress it.zenblog_zengeo_integration — disable the Zen GEO linkage.zenblog_reading_speed — words per minute for the reading-time estimate (default 200).zenblog_filter_scope_limit — how many posts the filter bar inspects to decide which terms to offer (default 1000).zenblog_term_choices_limit / zenblog_post_choices_limit — how many terms and posts the panel offers.