PHPackages                             mage2kishan/module-blog - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. mage2kishan/module-blog

ActiveMagento2-module[Utility &amp; Helpers](/categories/utility)

mage2kishan/module-blog
=======================

Panth\_Blog — SEO-grade blog module for Magento 2 with first-class AEO/AIO support: JSON-LD, llms.txt, IndexNow, hreflang, markdown export, RSS/Atom feeds, and Hyva-first templates. Built to plug into the Panth\_\* ecosystem.

1.0.2(1mo ago)07proprietaryPHPPHP ~8.1.0||~8.2.0||~8.3.0||~8.4.0

Since May 18Pushed 1mo agoCompare

[ Source](https://github.com/mage2sk/module-blog)[ Packagist](https://packagist.org/packages/mage2kishan/module-blog)[ RSS](/packages/mage2kishan-module-blog/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (14)Versions (4)Used By (0)

Magento 2 Blog Extension: SEO-Grade Blog with JSON-LD, llms.txt, IndexNow, RSS and Hyva/Luma Templates
======================================================================================================

[](#magento-2-blog-extension-seo-grade-blog-with-json-ld-llmstxt-indexnow-rss-and-hyvaluma-templates)

[![Magento 2.4.4 - 2.4.8](https://camo.githubusercontent.com/079c832211eed4f9451ebe264e3865f825b0f9f31b041cbf03676c6e254535d4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6167656e746f2d322e342e342532302d2d253230322e342e382d6f72616e67653f6c6f676f3d6d6167656e746f266c6f676f436f6c6f723d7768697465)](https://magento.com)[![PHP 8.1 - 8.4](https://camo.githubusercontent.com/56b3cce18841623e2cbed2ebf09b06be1be8807e99e6e054a89d304ab4790b8e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e312532302d2d253230382e342d626c75653f6c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://php.net)[![Hyva + Luma](https://camo.githubusercontent.com/d4d6a05401973034a5aae392f030440eefa40afc9191ffb06ed897af5d25adb1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5468656d65732d487976612532302532422532304c756d612d313462386136)](https://www.hyva.io)[![Live Demo & Details](https://camo.githubusercontent.com/ad5b961d221ab5d54672a181dca4cd5b8ca31abe2f6296ff98830df4724dec7b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69766525323044656d6f25323025323625323044657461696c732d6d6167656e746f2d2d322d2d626c6f672d3044393438383f7374796c653d666c6174)](https://kishansavaliya.com/magento-2-blog.html)[![Packagist](https://camo.githubusercontent.com/9388c769b64159f1f61b46e0f243f79d13602d26e360aee937bb1ee1fe183cb9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5061636b61676973742d6d616765326b697368616e2532466d6f64756c652d2d626c6f672d6f72616e67653f6c6f676f3d7061636b6167697374266c6f676f436f6c6f723d7768697465)](https://packagist.org/packages/mage2kishan/module-blog)[![Upwork Top Rated Plus](https://camo.githubusercontent.com/6f72584179420c41ed90432fd2579a4ed36199d4229e8181d20f353c1c4ee4eb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5570776f726b2d546f702532305261746564253230506c75732d3134613830303f6c6f676f3d7570776f726b266c6f676f436f6c6f723d7768697465)](https://www.upwork.com/freelancers/~016dd1767321100e21)[![Website](https://camo.githubusercontent.com/f1ae86d28e2b505aee60f240d3e5508e390b0a8dc7a9b7ecf1b450fad862053f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f576562736974652d6b697368616e736176616c6979612e636f6d2d304439343838)](https://kishansavaliya.com)

> **Add a full-featured, SEO-ready blog to your Magento 2 store.** Panth Blog gives every post valid JSON-LD schema, AI-search readiness via llms.txt and IndexNow, RSS and Atom feeds, Markdown export, and responsive templates for both **Hyva (Alpine.js)** and **Luma**.

**Product page:** [kishansavaliya.com/magento-2-blog.html](https://kishansavaliya.com/magento-2-blog.html)

---

Quick Answer
------------

[](#quick-answer)

**What is Panth Blog?** It is a Magento 2 blog extension built for SEO, Answer Engine Optimization (AEO), and Generative Engine Optimization (GEO). It adds a blog to your store with posts, categories, tags, authors, and comments, and emits valid JSON-LD structured data on every page.

**What does it add to my store?**

- A **full blog** with posts, hierarchical categories, tags, authors, and an optional comment system.
- **JSON-LD schema** (BlogPosting, Person, BreadcrumbList, FAQPage, HowTo, CollectionPage, ProfilePage) on every page type.
- **llms.txt + llms.json** integration so AI crawlers like GPTBot and ClaudeBot can index your blog content.
- **IndexNow auto-pinging** to notify Bing and Yandex within minutes of publishing a post.
- **RSS 2.0 and Atom 1.0 feeds** site-wide and per category, tag, and author.
- **Markdown export** at `/blog/.md` for headless and AI use cases.
- **TL;DR auto-extraction**, table of contents, reading time, and share buttons.

**Which themes are supported?** Both **Hyva** (Tailwind + Alpine.js, no jQuery) and **Luma** (complete BEM stylesheet, no Tailwind dependency). The storefront looks the same on both.

**What does it need?** Magento 2.4.4 to 2.4.8, PHP 8.1 to 8.4, and the free `mage2kishan/module-core` package.

---

Need Custom Magento 2 Development?
----------------------------------

[](#need-custom-magento-2-development)

> **Get a free quote for your project in 24 hours** for custom modules, Hyva themes, performance work, M1 to M2 migrations, and Adobe Commerce Cloud.

 [ ![Get a Free Quote](https://camo.githubusercontent.com/eac8c45d21cff8b139ddc392325f3bd6c8266a6f3d7b23f15131c958f3d3c8d0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476574253230612532304672656525323051756f74652532302545322538362539322d5265706c7925323077697468696e2532303234253230686f7572732d4443323632363f7374796c653d666f722d7468652d6261646765) ](https://kishansavaliya.com/get-quote)

### Kishan Savaliya

[](#kishan-savaliya)

**Top Rated Plus on Upwork**

[![Hire on Upwork](https://camo.githubusercontent.com/b69353d3c6e192f4d03cc36bb8883612004e32f54dd2dbcc1e700dd791acd875/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f486972652532306f6e2532305570776f726b2d546f702532305261746564253230506c75732d3134613830303f7374796c653d666f722d7468652d6261646765266c6f676f3d7570776f726b266c6f676f436f6c6f723d7768697465)](https://www.upwork.com/freelancers/~016dd1767321100e21)

100% Job Success • 10+ Years Magento Experience Adobe Certified • Hyva Specialist

### Panth Infotech Agency

[](#panth-infotech-agency)

**Magento Development Team**

[![Visit Agency](https://camo.githubusercontent.com/bbf04bdd2aff502082508568ec42ace3a7475c98756f596e2013056c89726ed6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f56697369742532304167656e63792d50616e7468253230496e666f746563682d3134613830303f7374796c653d666f722d7468652d6261646765266c6f676f3d7570776f726b266c6f676f436f6c6f723d7768697465)](https://www.upwork.com/agencies/1881421506131960778/)

Custom Modules • Theme Design • Migrations Performance • SEO • Adobe Commerce Cloud

**Visit our website:** [kishansavaliya.com](https://kishansavaliya.com) | **Get a quote:** [kishansavaliya.com/get-quote](https://kishansavaliya.com/get-quote)

---

Table of Contents
-----------------

[](#table-of-contents)

- [Who Is It For](#who-is-it-for)
- [Key Features](#key-features)
- [Compatibility](#compatibility)
- [Installation](#installation)
- [Configuration](#configuration)
- [How It Works](#how-it-works)
- [URL Structure](#url-structure)
- [Admin Management](#admin-management)
- [Screenshots](#screenshots)
- [JSON-LD Schema](#json-ld-schema)
- [AI Integration](#ai-integration)
- [RSS and Atom Feeds](#rss-and-atom-feeds)
- [Markdown Export](#markdown-export)
- [CLI Commands](#cli-commands)
- [Cron Jobs](#cron-jobs)
- [REST and GraphQL APIs](#rest-and-graphql-apis)
- [FAQ](#faq)
- [Support](#support)
- [About Panth Infotech](#about-panth-infotech)
- [Quick Links](#quick-links)

---

Who Is It For
-------------

[](#who-is-it-for)

- **Stores that use content to drive organic traffic** and want structured data and AI-search readiness built in, not bolted on.
- **Merchants on Hyva** who need a blog built with Tailwind and Alpine.js, with no jQuery or Knockout pulled back in.
- **Teams publishing regular articles, guides, or tutorials** who want authors, categories, tags, and related posts managed from the standard Magento admin.
- **Developers building headless storefronts** who need REST, GraphQL, and a Markdown export endpoint to consume blog content.
- **Stores targeting AI-driven discovery** (ChatGPT, Perplexity, Bing) where IndexNow pings and llms.txt exposure give published posts a faster path into AI indexes.

---

Key Features
------------

[](#key-features)

### Content Management

[](#content-management)

- **Posts** with title, URL slug, short description, full HTML content, featured image, OG image, per-post meta (title, description, robots, canonical override), layout template, and per-store content overrides.
- **Hierarchical categories** (up to 3 levels), banner image, per-category template and posts-per-page override, denormalized post count.
- **Tags** with thin-content guard: tags below the configured post-count threshold are automatically flipped to `noindex,follow`.
- **Authors** with display name, role, avatar, short and long bio, social links JSON, and `Person.knowsAbout`, `Person.alumniOf`, `Person.sameAs` fields that feed directly into JSON-LD.
- **Comments** with pending/approved/spam/trash workflow, threaded replies, per-IP rate-limit hooks, and captcha provider hooks. Disabled by default.
- **Related posts** with manual override and auto-suggest based on category overlap.
- **Multi-store** per-store post visibility and per-store content overrides.
- **URL history** with automatic 301 redirects when a post slug changes.

### SEO and Structured Data

[](#seo-and-structured-data)

- **JSON-LD per page type**: `BlogPosting + Person + BreadcrumbList` on single posts, `CollectionPage + BreadcrumbList` on category and tag pages, `ProfilePage + Person` on author pages, `Blog + BreadcrumbList` on the index.
- **Optional FAQPage schema** when the `Panth_Faq` inline widget is present on a post.
- **Optional HowTo schema** auto-detected from numbered H2 headings.
- **OG + Twitter Card meta** with `og:type=article`, published and modified timestamps, article section, and author fields.
- **Per-post meta fields**: `meta_title`, `meta_description`, `meta_keywords`, `meta_robots`, `canonical_url` overrides.
- **Configurable title template** with `{{post.title}}`, `{{post.meta_title}}`, `{{post.category}}`, `{{post.author}}` tokens.
- **Hreflang integration** via `Panth_Hreflang` (optional, class-exists guarded).
- **Sitemap and HTML sitemap** contributors for `Panth_XmlSitemap` and `Panth_HtmlSitemap` (optional, guarded).
- **`rel=prev/next`** and canonical URLs on paginated archive pages.

### AEO (Answer Engine Optimization)

[](#aeo-answer-engine-optimization)

- **TL;DR auto-extraction**: when the admin field is blank, the first 80-120 words are extracted on save and rendered as an `` callout above the article body.
- **Auto table of contents** built from H2 and H3 headings; sticky on desktop, drawer on mobile.
- **Reading time** computed from word count and a configurable reading speed (words per minute).
- **Citation footnotes** from a `citation_list` JSON column, rendered as numbered references and emitted as `WebPage.citation` schema.

### AIO (AI Indexing)

[](#aio-ai-indexing)

- **llms.txt integration**: when `Panth_LlmsTxt` is installed, blog posts are injected into `/llms.txt` and `/llms-full.txt` with a configurable post count cap.
- **llms.json integration**: a structured `blog` section is added to `/llms.json` with URL, label, summary, and `published_at` per post.
- **Markdown export endpoint** at `/blog/.md` with YAML frontmatter, disabled per store if needed.
- **AI bot allow-list** for user-agent tokens (GPTBot, ClaudeBot, PerplexityBot, Google-Extended) surfaced for `Panth_RobotsSeo` integration.

### GEO (Generative Engine Optimization)

[](#geo-generative-engine-optimization)

- **IndexNow auto-ping**: an observer queues the post URL when it transitions to `published`; a cron job drains the queue every 5 minutes in configurable batches.
- **Per-event toggles**: notify on publish, notify on update, notify on delete.
- **Manual ping CLI**: `panth:blog:indexnow:ping --post-id=N`.

### Feeds and Discovery

[](#feeds-and-discovery)

- **RSS 2.0 and Atom 1.0** feeds site-wide and per category, tag, and author.
- **Full or partial content** toggle per feed.
- **Feed discovery** via `` in every blog page ``.
- **Feed cache** via the `panth_blog_feed` cache type with configurable TTL.

### Storefront UX

[](#storefront-ux)

- **Hyva theme**: Tailwind utilities and Alpine.js. No jQuery, RequireJS, or Knockout.
- **Luma theme**: a complete `pb-*` BEM stylesheet with no Tailwind dependency. Same visual output as Hyva.
- **Responsive grid**: 1 column on mobile, 2 at 768px, 3 at 1024px.
- **Featured post block** on page 1 of the index rendered as a two-column hero card.
- **Sticky TOC** on desktop, off-canvas drawer on mobile.
- **Pagination** with prev/next, pill buttons, and `rel="prev/next"` head links.
- **Sidebar widgets**: search, recent posts, categories, size-scaled tag cloud, subscribe, RSS link.
- **Share buttons**: Twitter, LinkedIn, copy URL.

### Developer Experience

[](#developer-experience)

- **REST API** with full CRUD for posts, categories, tags, and authors.
- **Read-only GraphQL** queries: `panthBlogPosts`, `panthBlogPost`, `panthBlogCategories`, `panthBlogTags`, `panthBlogAuthors`.
- **8 CLI commands** for URL rewrite rebuild, count refresh, OG image generation, post import/export, IndexNow ping, tag robots fix, and demo seeder.
- **6 cron jobs**: publish-scheduled, refresh-counts, warm-feed-cache, drain-indexnow-queue, archive-stale-drafts, daily heartbeat.
- **Strict DI**: zero `ObjectManager` calls, constructor dependency injection throughout.
- **All cross-module hooks are class-exists guarded** so the module runs cleanly without any optional sibling package installed.

---

Compatibility
-------------

[](#compatibility)

RequirementVersions SupportedMagento Open Source2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8Adobe Commerce2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8Adobe Commerce Cloud2.4.4 to 2.4.8PHP8.1.x, 8.2.x, 8.3.x, 8.4.xHyva Theme1.3+ (Tailwind + Alpine.js)Luma ThemeNative support (BEM stylesheet, no Tailwind dependency)Required Dependency`mage2kishan/module-core` (free)---

Installation
------------

[](#installation)

### Composer Installation (Recommended)

[](#composer-installation-recommended)

```
composer require mage2kishan/module-blog
bin/magento module:enable Panth_Core Panth_Blog
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento cache:flush
```

### Manual Installation via ZIP

[](#manual-installation-via-zip)

1. Download the latest release from [Packagist](https://packagist.org/packages/mage2kishan/module-blog) or from the [product page](https://kishansavaliya.com/magento-2-blog.html).
2. Extract it to `app/code/Panth/Blog/` in your Magento install.
3. Make sure `Panth_Core` is installed too (required dependency).
4. Run the commands above starting from `bin/magento module:enable`.

### Verify Installation

[](#verify-installation)

```
bin/magento module:status Panth_Blog
# Expected: Module is enabled
```

After install, open:

```
Admin → Panth Infotech → Blog → Manage Posts
Admin → Stores → Configuration → Panth → Blog

```

### Optional: Seed Demo Data

[](#optional-seed-demo-data)

```
bin/magento panth:blog:seed:demo
```

This creates 5 sample posts, 5 categories, 5 tags, and 5 authors. Useful for checking the storefront before adding real content. Running it a second time prints "already exists" rather than duplicating data.

---

Configuration
-------------

[](#configuration)

Go to **Stores → Configuration → Panth → Blog**.

SettingGroupDefaultDescriptionEnabledGeneralYesMaster toggle for the blog.Route Front NameGeneralblogURL prefix for all blog pages. Changing it requires a URL rewrite rebuild.Blog Index TitleGeneral-H1 and page title on the `/blog` index page.Blog Index Meta DescriptionGeneral-Meta description for the blog index.Blog Hero TextGeneral-Subtitle shown in the hero header on the index page.Posts Per PageGeneral-Number of posts per paginated page.Reading Speed (words/min)General-Used to auto-compute reading time on each post.Show Reading TimeGeneralYesDisplay computed reading time on post pages.Show Author Bio at Post FootGeneralYesShow author name, avatar, and bio at the bottom of each post.Show Share ButtonsGeneralYesShow Twitter, LinkedIn, and copy-URL share buttons on post pages.Show Table of ContentsDisplayYesAuto-build and display a TOC from H2/H3 headings.Related Posts CountDisplay-Number of related posts to show below each post.Default Category TemplateDisplaygridLayout used for category listing pages (grid/list/magazine).Sidebar: CategoriesDisplayYesShow categories widget in the blog sidebar.Sidebar: Tag CloudDisplayYesShow tag cloud widget in the blog sidebar.Sidebar: SearchDisplayYesShow search widget in the blog sidebar.Enable FeedsRSS / Atom FeedsYesEnable RSS 2.0 and Atom 1.0 feed endpoints.Posts Per FeedRSS / Atom Feeds-Maximum posts in each feed.Include Full ContentRSS / Atom FeedsNoInclude `` with full HTML in feed items.Per-Category FeedsRSS / Atom FeedsYesEnable per-category RSS feed endpoints.Per-Tag FeedsRSS / Atom FeedsYesEnable per-tag RSS feed endpoints.Per-Author FeedsRSS / Atom FeedsYesEnable per-author RSS feed endpoints.Cache TTL (seconds)RSS / Atom Feeds-How long feed output is cached before regeneration.Title TemplateSEO-Page title template with `{{post.title}}`, `{{post.category}}`, `{{post.author}}` tokens.Fallback Meta DescriptionSEO-Used when a post has no custom meta description.Tag Thin-Content ThresholdSEO-Tags with fewer posts than this number are auto-set to `noindex,follow`.Auto-extract TL;DRAEOYesAuto-populate the TL;DR summary from the first 80-120 words when the field is blank.HowTo Auto-detectAEOYesAuto-emit HowTo JSON-LD when numbered H2 steps are detected in post content.Include in llms.txtAIOYesInject a blog section into `/llms.txt` when `Panth_LlmsTxt` is installed.Max Posts in llms.txt Blog SectionAIO50Cap on the number of posts listed in `/llms.txt` and `/llms.json`.Include in llms-full.txtAIOYesInclude blog posts in the extended `/llms-full.txt` file.Enable Markdown Export EndpointAIOYesEnable `/blog/.md` for each published post.AI Bots Allow-listAIO-Comma-separated user-agent tokens for AI bots allowed to crawl blog content.Enable IndexNow NotificationsIndexNowYesPing Bing and Yandex via IndexNow when posts are published.Notify on PublishIndexNowYesQueue a ping when a post transitions to published status.Notify on UpdateIndexNowYesRe-queue a published post on every subsequent save.Notify on DeleteIndexNowYesPing IndexNow on post deletion to speed up de-indexing.Batch SizeIndexNow100Maximum URLs drained per cron run.Enable CommentsCommentsNoEnable the comment system. Disabled by default.Who Can CommentComments-Restrict commenting to guests, registered customers, or both.Auto-approve Registered CustomersCommentsNoSkip the moderation queue for logged-in customers.Max Submissions per Hour per IPComments-Rate-limit scaffold (not enforced in v1).Allow Threaded RepliesCommentsYesAllow one level of reply threading on comments.CAPTCHA ProviderComments-Select math, Turnstile, hCaptcha, or reCAPTCHA (scaffolding in v1).Add rel="nofollow" to External LinksCommentsYesInject `rel="nofollow"` on external links in comment content.All settings are store-view scoped where applicable.

---

How It Works
------------

[](#how-it-works)

1. Posts are managed from **Admin → Panth Infotech → Blog → Manage Posts** using standard Magento UI components.
2. When a post is saved with `published` status, the observer queues the URL for IndexNow and triggers URL rewrite creation.
3. The custom router matches `/blog/*` paths and dispatches to the appropriate controller: index, post, category, tag, author, search, feed, or markdown export.
4. Each page response injects JSON-LD structured data and OG/Twitter Card meta into the page ``.
5. For Hyva stores, Alpine.js components handle the TOC, sidebar search, and share buttons with no jQuery. For Luma stores, the `pb-*` BEM stylesheet provides the same visual result.
6. Cron jobs run scheduled publishing, count refresh, feed cache warming, and IndexNow queue drain automatically.

---

URL Structure
-------------

[](#url-structure)

PathPage`/blog`Index: featured post + paginated grid`/blog/page/2`Paginated index`/blog/`Single post`/blog/.md`Markdown export of the post`/blog/category/`Category listing`/blog/category//page/2`Paginated category`/blog/tag/`Tag listing`/blog/author/`Author profile with their posts`/blog/search?q=keyword`Blog search results`/blog/feed.xml`RSS 2.0 site-wide feed`/blog/feed/atom.xml`Atom 1.0 site-wide feed`/blog/feed/category/.xml`Per-category RSS 2.0`/blog/feed/tag/.xml`Per-tag RSS 2.0`/blog/feed/author/.xml`Per-author RSS 2.0The route front name (`blog`) is configurable. Changing it via admin automatically updates all canonical URLs, pagination links, feed discovery tags, and JSON-LD `@id` values after a cache flush.

---

Admin Management
----------------

[](#admin-management)

- **Manage Posts** at `Panth Infotech → Blog → Manage Posts`: full CRUD with featured image, WYSIWYG body, multi-tab form (Content / Categorisation / Publishing / SEO / AEO), mass delete, status toggle, duplicate action.
- **Manage Categories** at `Panth Infotech → Blog → Manage Categories`: hierarchical tree, banner image, per-category template and posts-per-page override.
- **Manage Tags** at `Panth Infotech → Blog → Manage Tags`: flat list with post-count and robots directive columns.
- **Manage Authors** at `Panth Infotech → Blog → Manage Authors`: display name, role, avatar, bio, social links JSON, and schema fields (`knowsAbout`, `alumniOf`, `sameAs`).
- **Manage Comments** at `Panth Infotech → Blog → Manage Comments`: moderation grid with bulk approve and bulk spam, IP column, pending/approved/spam/trash workflow.

---

Screenshots
-----------

[](#screenshots)

### Admin

[](#admin)

[![Admin grid listing 5 blog posts with title, URL key, status, published date, views, and created columns](docs/screenshots/01-admin-posts-grid.png)](docs/screenshots/01-admin-posts-grid.png)
**Blog Posts grid** — native Magento UI grid with inline filters, mass actions, sort, and the canonical full-width 1-column admin layout.[![Admin grid of 8 blog categories with name, URL key, level, post count, active, sort order columns](docs/screenshots/02-admin-categories-grid.png)](docs/screenshots/02-admin-categories-grid.png)
**Blog Categories grid** — hierarchical category management; level + post-count columns make taxonomy health visible at a glance.[![Admin grid of 5 blog tags with name, URL key, posts, robots directive, and created columns](docs/screenshots/03-admin-tags-grid.png)](docs/screenshots/03-admin-tags-grid.png)
**Blog Tags grid** — the Robots column reflects the thin-content guard (auto `noindex,follow` for tags below the threshold).[![Admin grid of 6 blog authors with display name, URL key, role, email, active, sort order](docs/screenshots/04-admin-authors-grid.png)](docs/screenshots/04-admin-authors-grid.png)
**Blog Authors grid** — author identity for E-E-A-T signals; each row feeds the Person JSON-LD on author pages and post bylines.[![Admin moderation grid for blog comments with author, email, post ID, excerpt, status, IP columns](docs/screenshots/05-admin-comments-grid.png)](docs/screenshots/05-admin-comments-grid.png)
**Blog Comments moderation grid** — pending/approved/spam/trash workflow, IP visibility, bulk approve and bulk spam mass actions. Comments are disabled by default; enable per store via Configuration.[![Store Configuration panel with all 8 Panth Blog setting groups expanded](docs/screenshots/06-admin-configuration.png)](docs/screenshots/06-admin-configuration.png)
**Store Configuration — Panth Blog** — eight groups (General, Display, RSS/Atom Feeds, SEO, AEO, AIO, IndexNow, Comments) all store-view scoped.### Storefront

[](#storefront)

[![Blog index page with hero header, featured post block, two-column post grid, and right sidebar with search, recent posts, categories](docs/screenshots/07-storefront-blog-index.png)](docs/screenshots/07-storefront-blog-index.png)
**Blog index (`/blog`)** — centred hero, full-width featured post block on page 1, responsive post-card grid, sticky sidebar with search, recent posts, categories, tag cloud, subscribe, and RSS link.[![Blog search results page with prominent search input and result count for the query gpt](docs/screenshots/08-storefront-search.png)](docs/screenshots/08-storefront-search.png)
**Blog search (`/blog/search?q=gpt`)** — prominent search field, dynamic result count, list-style result cards. Search pages are `noindex,follow` by default.[![Single blog post page with category pill, title, author byline, content sections, tag chips, and share buttons](docs/screenshots/09-storefront-post.png)](docs/screenshots/09-storefront-post.png)
**Single post (`/blog/`)** — breadcrumbs, category pill, author and date meta, TL;DR callout, auto TOC, prose body, share buttons, author footer card, related posts, and full BlogPosting + Person + BreadcrumbList JSON-LD.---

JSON-LD Schema
--------------

[](#json-ld-schema)

Every blog page emits Google-valid structured data as JSON-LD in a `@graph`. Example for a single post:

```
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "BlogPosting",
      "@id": "https://example.com/blog/getting-started-with-hyva#article",
      "headline": "Getting started with Hyva",
      "description": "A practical walkthrough of installing Hyva.",
      "datePublished": "2026-05-18T12:00:00+00:00",
      "dateModified": "2026-05-18T12:00:00+00:00",
      "wordCount": 850,
      "timeRequired": "PT4M",
      "author": {"@id": "https://example.com/blog/author/jane-doe#person"}
    },
    {
      "@type": "Person",
      "@id": "https://example.com/blog/author/jane-doe#person",
      "name": "Jane Doe",
      "jobTitle": "Senior Editor",
      "knowsAbout": ["Magento", "Hyva"]
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {"@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/"},
        {"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://example.com/blog"},
        {"@type": "ListItem", "position": 3, "name": "Getting started with Hyva", "item": "https://example.com/blog/getting-started-with-hyva"}
      ]
    }
  ]
}
```

FAQPage schema is added when the `Panth_Faq` inline widget is on the page. HowTo schema is added when numbered H2 steps are detected. Both are controlled by admin toggles and validate in Google's Rich Results Test.

---

AI Integration
--------------

[](#ai-integration)

### llms.txt

[](#llmstxt)

When `Panth_LlmsTxt` is installed, Panth Blog injects a `## Blog Posts` section into `/llms.txt` and `/llms-full.txt`:

```
## Blog Posts

Latest articles from this store.

- [Getting started with Hyva](/blog/getting-started-with-hyva) — A practical walkthrough of installing Hyva.
- [Core Web Vitals for Magento in 2026](/blog/core-web-vitals-2026) — INP replaced FID. Here is what to measure.

```

The number of posts is capped by the `Max Posts in llms.txt Blog Section` setting (default 50). A structured `blog` section is also added to `/llms.json` with URL, label, summary, and `published_at` per entry.

### IndexNow

[](#indexnow)

The `Observer/PostSaveAfter.php` observer queues post URLs in the `panth_blog_indexnow_queue` table when a post transitions to `published`. The `Cron/NotifyIndexNow.php` job drains the queue every 5 minutes, in configurable batches, using `Panth_IndexNow` if installed, or a direct API POST as fallback.

Manual ping:

```
bin/magento panth:blog:indexnow:ping --post-id=2
```

---

RSS and Atom Feeds
------------------

[](#rss-and-atom-feeds)

Panth Blog ships six feed endpoints, all RFC-compliant and cached via the `panth_blog_feed` cache type:

EndpointFormatScope`/blog/feed.xml`RSS 2.0Site-wide latest N posts`/blog/feed/atom.xml`Atom 1.0Site-wide latest N posts`/blog/feed/category/.xml`RSS 2.0Per category`/blog/feed/tag/.xml`RSS 2.0Per tag`/blog/feed/author/.xml`RSS 2.0Per author`/blog/feed/comments.xml`RSS 2.0Latest 25 approved comments (when comments are enabled)Each item includes ``, ``, ``, `` (CDATA), optional ``, RFC 822 ``, ``, ``, and optional ``. Cache TTL and per-type feed toggles are admin-configurable.

---

Markdown Export
---------------

[](#markdown-export)

Every published post is reachable at `/blog/.md` with `Content-Type: text/markdown; charset=utf-8` and YAML frontmatter:

```
---
title: "Getting started with Hyva"
url_key: getting-started-with-hyva
published_at: 2026-05-18 12:00:00
---

> A practical walkthrough of installing Hyva.

## Why Hyva

Hyva is a Tailwind-based front-end for Magento that replaces the Luma + RequireJS stack.
```

Disable per store at `panth_blog/aio/markdown_export_enabled=0`.

---

CLI Commands
------------

[](#cli-commands)

```
# Rebuild URL rewrites for all blog entities
bin/magento panth:blog:url-rewrite:rebuild

# Recompute denormalised post counts on categories and tags
bin/magento panth:blog:counts:refresh

# Export a post as markdown to stdout
bin/magento panth:blog:post:export --post-id=2 --format=markdown > post.md

# Import a markdown file with YAML frontmatter as a new post
bin/magento panth:blog:post:import path/to/post.md

# Queue an IndexNow ping for a single post
bin/magento panth:blog:indexnow:ping --post-id=2

# Apply thin-content robots flip to all tags
bin/magento panth:blog:tags:auto-robots

# Generate OG images (stub in v1)
bin/magento panth:blog:og-images:generate [--post-id=N]

# Seed 5 demo authors, categories, tags, and posts (idempotent)
bin/magento panth:blog:seed:demo
```

---

Cron Jobs
---------

[](#cron-jobs)

JobSchedulePurpose`panth_blog_publish_scheduled`every 5 minFlip scheduled posts to published when `published_at
