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.0(3w ago)03↓100%proprietaryPHPPHP ~8.1.0||~8.2.0||~8.3.0||~8.4.0

Since May 18Pushed 3w 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 1w ago

READMEChangelogDependencies (7)Versions (2)Used By (0)

Blog Module for Magento 2 — SEO-Grade Blog with JSON-LD, llms.txt, IndexNow, RSS &amp; Hyva/Luma Templates | Panth Infotech
===========================================================================================================================

[](#blog-module-for-magento-2--seo-grade-blog-with-json-ld-llmstxt-indexnow-rss--hyvaluma-templates--panth-infotech)

[![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/77afa3058c2dc06e7198da4d3d458abd9b8c0c48de2cb6c8ae55458e0586a4fb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5468656d652d487976612532302532422532304c756d612d626c756576696f6c6574)![SEO JSON-LD](https://camo.githubusercontent.com/1de0e429cedba1fa37ed6fc0b122048fe5701b91e4c2ccd04aba3c4421c929fe/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53454f2d4a534f4e2d2d4c44253230536368656d612d73756363657373)![AI Ready](https://camo.githubusercontent.com/64a6e3ab9acd127c9930aeb688d30f2343a0903d9f6c9e3ea73a0dc59fd87a7e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41492d6c6c6d732e747874253230253242253230496e6465784e6f772d393333336561)[![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)[![Panth Infotech Agency](https://camo.githubusercontent.com/401a792e990131002e91054d1b04494af5a2152fcc891ca000eb683786770abf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4167656e63792d50616e7468253230496e666f746563682d3134613830303f6c6f676f3d7570776f726b266c6f676f436f6c6f723d7768697465)](https://www.upwork.com/agencies/1881421506131960778/)[![Get a Quote](https://camo.githubusercontent.com/0b6c02cc1ad00f11bf1b0164a9998734bd716473db36cc2a5c1517e3d3578d1b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4765742532306125323051756f74652d46726565253230457374696d6174652d444332363236)](https://kishansavaliya.com/get-quote)

> **SEO-grade blog extension** for Magento 2 with full **JSON-LD schema** (BlogPosting, Person, BreadcrumbList, FAQPage, HowTo, CollectionPage, ProfilePage), **llms.txt + llms.json** integration for AI search, **IndexNow** auto-pinging, **RSS 2.0 + Atom 1.0** feeds, **Markdown export** endpoint, automatic **TL;DR extraction**, table of contents, hreflang hooks, and beautifully responsive **Hyva (Alpine.js)** + **Luma (vanilla CSS)** storefront templates. Magento 2.4.4 — 2.4.8.

**Panth Blog** is not a port of a WordPress-style blog into Magento — it is a content engine designed from the ground up for **SEO, AEO (Answer Engine Optimization), and GEO (Generative Engine Optimization)**. Every post emits valid `BlogPosting` JSON-LD with author `Person`, breadcrumbs, FAQs, and HowTo schema where applicable. The blog content is exposed to AI crawlers via the `Panth_LlmsTxt` integration so ChatGPT, Claude, and Perplexity can index your posts; IndexNow notifies Bing and Yandex within minutes of publish; and the storefront ships in Hyva first (Tailwind + Alpine.js) with full Luma fallback styling that does not depend on Tailwind. Built on **Panth Core**, with native **REST + GraphQL** APIs and a CLI for import/export.

---

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

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

> **Get a free quote for your project in 24 hours** — custom modules, Hyva themes, performance optimization, M1→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)

- [Why Panth Blog](#why-panth-blog)
- [Key Features](#key-features)
- [Compatibility](#compatibility)
- [Installation](#installation)
- [Configuration](#configuration)
- [URL Structure](#url-structure)
- [Admin Management](#admin-management)
- [Screenshots](#-screenshots)
- [JSON-LD Schema (SEO)](#json-ld-schema-seo)
- [AI Integration (llms.txt + IndexNow)](#ai-integration-llmstxt--indexnow)
- [RSS / Atom Feeds](#rss--atom-feeds)
- [Markdown Export](#markdown-export)
- [CLI Commands](#cli-commands)
- [Cron Jobs](#cron-jobs)
- [REST &amp; GraphQL APIs](#rest--graphql-apis)
- [FAQ](#faq)
- [Support](#support)
- [About Panth Infotech](#about-panth-infotech)

---

Why Panth Blog
--------------

[](#why-panth-blog)

Most Magento blog extensions are a checkbox feature — a CMS-page wrapper with a WYSIWYG editor and a category filter. **Panth Blog** is built for stores that take content seriously as a growth channel:

1. **SEO out of the box** — every post emits valid `BlogPosting` JSON-LD with author, breadcrumbs, FAQs, and HowTo schema. No Yoast / Rank Math plugin needed.
2. **AI-search ready** — first-class integration with `Panth_LlmsTxt` exposes blog posts to ChatGPT, Claude, and Perplexity via `/llms.txt`, `/llms-full.txt`, and `/llms.json`.
3. **IndexNow auto-ping** — published posts notify Bing and Yandex within 5 minutes; manual ping CLI command included.
4. **Hyva + Luma** — the storefront is Hyva first (Tailwind + Alpine.js, no jQuery on Hyva), with a complete Luma stylesheet (no Tailwind dependency) so the design renders identically on both.
5. **Strict DI, additive schema, idempotent installs** — production-grade engineering: no `ObjectManager` calls anywhere, schema changes are backward-compatible, `setup:upgrade` is safe to re-run.
6. **Markdown import/export** — write posts in your editor of choice; YAML frontmatter is supported by the CLI importer and the public `/blog/.md` endpoint.
7. **Native REST + GraphQL** — full CRUD via REST, read-only GraphQL for headless storefronts.

---

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

[](#key-features)

### Content Management

[](#content-management)

- **Posts** — title, URL key, short description, full HTML / WYSIWYG content, featured image, OG image, meta SEO fields, layout template variant, per-store overrides
- **Categories** — hierarchical (up to 3 levels), banner image, sort order, per-category posts-per-page and template (grid / list / magazine) override, denormalised post-count cache
- **Tags** — flat, lightweight, auto-created from post-edit form; thin-content guard auto-flips tags with `< N` posts to `noindex,follow`
- **Authors** — display name, role, short + long bio, avatar, email, social links JSON, `Person.knowsAbout`, `Person.alumniOf`, `Person.sameAs` arrays for schema
- **Comments** — threaded (1 level), pending/approved/spam/trash workflow, IP rate limit hooks, captcha hooks (math / Turnstile / hCaptcha / reCAPTCHA), nofollow injection on external links — disabled by default in v1
- **Related posts** — manual override + auto-suggest based on category overlap + recency
- **Multi-store** — per-store post visibility, per-store title/description/content overrides
- **URL history** — slug changes are tracked; 404 hits auto-redirect 301 to the new URL

### SEO &amp; Structured Data

[](#seo--structured-data)

- **JSON-LD per page type**:
    - `/blog` → `Blog` + `BreadcrumbList`
    - `/blog/` → `BlogPosting` + `Person` (author) + `BreadcrumbList` + optional `FAQPage` + optional `HowTo`
    - `/blog/category/` → `CollectionPage` + `BreadcrumbList`
    - `/blog/tag/` → `CollectionPage` + `BreadcrumbList`
    - `/blog/author/` → `ProfilePage` + `Person` + `BreadcrumbList`
- **OG + Twitter meta** — `og:type=article`, `og:title`, `og:description`, `og:image` (1200×630), `og:url`, `article:published_time`, `article:modified_time`, `article:author`, `article:section`, `article:tag`, full Twitter Card markup
- **Meta tags** — per-post `meta_title`, `meta_description`, `meta_keywords`, `meta_robots`, `canonical_url` overrides
- **Title template** — admin-configurable with tokens `{{post.title}}`, `{{post.meta_title}}`, `{{post.category}}`, `{{post.author}}`
- **Hreflang group** — auto-seeded `blog-posts` group for `Panth_Hreflang` integration
- **Sitemap integration** — contributor class for `Panth_XmlSitemap` emits posts, categories, active tags, and authors into `sitemap-blog-1.xml` with proper `lastmod` and `priority`
- **HTML sitemap** — contributor for `Panth_HtmlSitemap` adds a Blog section to the human-readable sitemap
- **rel=prev/next** + canonical URLs on paginated archives

### AEO (Answer Engine Optimization)

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

- **TL;DR auto-extraction** — first 80–120 words of post body auto-populated to `tldr_summary` on save when admin field is empty; rendered as an `` callout above the article
- **Table of contents** — auto-built from `` and `` headings with anchor IDs; sticky on desktop, drawer on mobile
- **HowTo schema** — auto-detected from numbered `` steps (e.g. `1. First step`); admin toggle
- **FAQPage schema** — inline FAQ widget integration via `Panth_Faq` adds `FAQPage` JSON-LD to the post graph
- **Citation footnotes** — `citation_list` JSON column rendered as numbered references at post foot; emitted as `WebPage.citation` schema
- **Reading time** — auto-computed from word count + admin `reading_speed_wpm` setting

### 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` via the bundled `BuilderPlugin`; admin toggle + `max_posts` setting
- **llms.json integration** — structured blog section added to `/llms.json` for AI agent indexers
- **Markdown export endpoint** — `/blog/.md` returns the post as plain markdown with YAML frontmatter, `Content-Type: text/markdown; charset=utf-8`
- **AI bot allow-list** — configurable list of bot user-agents (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, ChatGPT-User) surfaced via `Helper\Config::getAiBotsAllowed()` for `Panth_RobotsSeo` integration

### GEO (Generative Engine Optimization)

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

- **IndexNow auto-ping** — observer queues post URL on transition to `published`; cron drains the queue every 5 minutes; configurable batch size; falls back to direct API POST if `Panth_IndexNow` is absent
- **Per-event flags** — `notify_on_publish`, `notify_on_update`, `notify_on_delete` admin toggles
- **Manual ping CLI** — `panth:blog:indexnow:ping --post-id=N`

### Feeds &amp; Discovery

[](#feeds--discovery)

- **RSS 2.0** — `/blog/feed.xml` site-wide; `/blog/feed/category/.xml`, `/blog/feed/tag/.xml`, `/blog/feed/author/.xml` (per-type toggles)
- **Atom 1.0** — `/blog/feed/atom.xml`
- **Full or partial content** — toggle `` per feed
- **RFC 822 timestamps**, ``, ``, ``
- **Cached** — `panth_blog_feed` cache type with configurable TTL; warmed by cron
- **Feed discovery** — `` in every blog page ``

### Storefront UX

[](#storefront-ux)

- **Responsive grid** — 1 column under 768px, 2 columns 768–1023px, 3 columns ≥1024px
- **Featured post block** — first post on page 1 rendered in a 2-column horizontal hero card
- **Hyva theme** — Tailwind utilities + Alpine.js for TOC, search, subscribe
- **Luma theme** — comprehensive `pb-*` BEM stylesheet (no Tailwind dependency); same visual design as Hyva
- **Sticky TOC** on desktop, drawer on mobile
- **Pagination** — pill buttons with active state, ellipsis for large page counts, prev/next + `rel="prev/next"` head links
- **Breadcrumbs** — Home &gt; Blog &gt; Category &gt; Post, with `BreadcrumbList` JSON-LD
- **Share buttons** — Twitter, LinkedIn, Copy URL pill buttons
- **Sidebar widgets** — Search, Recent posts, Categories, Tag cloud (size-scaled by post\_count), Subscribe, RSS link

### Developer Experience

[](#developer-experience)

- **Strict DI** — zero `ObjectManager` calls, constructor property promotion throughout
- **PHP 8.1+** — readonly properties, named arguments, match expressions
- **Type-safe contracts** — `declare(strict_types=1)` on every file; full type hints
- **REST API** — `/V1/panth-blog/posts`, `/V1/panth-blog/categories`, `/V1/panth-blog/tags`, `/V1/panth-blog/authors` (CRUD)
- **GraphQL** — `panthBlogPosts`, `panthBlogPost(id|urlKey)`, `panthBlogCategories`, `panthBlogTags`, `panthBlogAuthors` (read-only)
- **CLI commands** — 8 commands for URL rewrite rebuild, count refresh, OG image generation, post import/export, IndexNow ping, tag auto-robots, demo seeder
- **Cron jobs** — 6 jobs: publish-scheduled, refresh-counts, warm-feed-cache, drain-indexnow-queue, archive-stale-drafts, daily heartbeat
- **Optional integrations** — every cross-module hook is `class_exists`-guarded so the module runs cleanly whether or not the sibling Panth\_\* module is 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 — 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)Panth\_Core^1.0 (installed automatically)Tested on:

- Magento 2.4.8-p2 with PHP 8.2 + Hyva 1.4.5
- Magento 2.4.8-p2 with PHP 8.2 + Luma

---

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

[](#installation)

### Composer Installation (Recommended)

[](#composer-installation-recommended)

```
composer require mage2kishan/module-blog
bin/magento module:enable 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 ZIP from [Packagist](https://packagist.org/packages/mage2kishan/module-blog) or the [Adobe Commerce Marketplace](https://commercemarketplace.adobe.com)
2. Extract to `app/code/Panth/Blog/` in your Magento installation
3. Run the same commands as above starting from `bin/magento module:enable Panth_Blog`

### Verify Installation

[](#verify-installation)

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

After installation, navigate to:

```
Admin → Stores → Configuration → Panth → Blog
Admin → Panth Infotech → Blog → Manage Posts
Admin → Panth Infotech → Blog → Manage Categories
Admin → Panth Infotech → Blog → Manage Tags
Admin → Panth Infotech → Blog → Manage Authors
Admin → Panth Infotech → Blog → Manage Comments

```

### 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 trying the module before adding real content. Idempotent: re-running prints "already exists" instead of duplicating.

---

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

[](#configuration)

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

GroupKey Settings**General**Enable/disable module, route front name, blog index title + meta description, hero text, posts per page, reading speed (wpm), show reading time, show author bio, show share buttons**Display**Show TOC, related posts count, default category template (grid/list/magazine), sidebar widget toggles (categories, tag cloud, search)**RSS / Atom Feeds**Enable feeds, posts per feed, include full content in feed, per-category/tag/author feed toggles, cache TTL**SEO**Title template with tokens, fallback meta description, tag thin-content threshold**AEO**TL;DR auto-extract, HowTo auto-detect**AIO**Include in llms.txt, max posts in llms.txt blog section, include in llms-full.txt, Markdown export endpoint, AI bots allow-list**IndexNow**Enable IndexNow notifications, notify on publish/update/delete, batch size**Comments**Enable comments (default: disabled), auto-approve registered customers, threading, captcha provider, nofollow on external linksAll settings are store-view scoped where applicable; comma-separated lists like the AI bot allow-list are parsed into arrays by `Helper\Config`.

---

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

[](#url-structure)

Clean URLs throughout — no query strings on canonical paths. The custom router resolves all of these:

PathPage`/blog`Index — featured post + grid`/blog/page/2`Paginated index`/blog/`Single post`/blog/.md`Markdown export of single post`/blog/category/`Category landing`/blog/category//page/2`Paginated category`/blog/tag/`Tag landing`/blog/author/`Author profile + their posts`/blog/search?q=keyword`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`/blog/feed/tag/.xml`Per-tag RSS`/blog/feed/author/.xml`Per-author RSSThe route front name (`blog` by default) is configurable in admin. Changing it cleanly switches the entire URL hierarchy — pagination, canonical URLs, feed discovery, and inner-page links all follow.

---

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

[](#admin-management)

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

All admin grids use Magento UI components with sticky header, inline filters, mass actions, per-column sort, bookmark profiles, and configurable column visibility, in the canonical full-width 1-column admin layout.

---

📸 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 with `post_count < 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. Every flag verified end-to-end on both Hyva and Luma.### 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 with accent rule, full-width featured post block on page 1, responsive post-card grid, sticky sidebar with Search, Recent Posts, Categories, Tag cloud, Subscribe. Featured post hero is rendered separately from the regular grid for editorial emphasis.[![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 large search field, dynamic result count, list-style result cards. Search is `noindex,follow` by default to avoid thin SERP pages.[![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, large title, author + date + reading-time meta row, prose body with proper typography, tagged chips, Twitter/LinkedIn/Copy share buttons, author footer card, related-posts grid, and full `BlogPosting` + `Person` + `BreadcrumbList` JSON-LD.---

JSON-LD Schema (SEO)
--------------------

[](#json-ld-schema-seo)

Every blog page emits Google-valid structured data as JSON-LD. 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 and shipping your first storefront tweak.",
      "image": ["https://example.com/media/blog/featured/hyva.jpg"],
      "datePublished": "2026-05-18T12:00:00+00:00",
      "dateModified": "2026-05-18T12:00:00+00:00",
      "wordCount": 850,
      "timeRequired": "PT4M",
      "articleSection": "Hyva",
      "keywords": "tailwind, magento-2.4.8",
      "author": {"@id": "https://example.com/blog/author/jane-doe#person"},
      "mainEntityOfPage": {"@type": "WebPage", "@id": "https://example.com/blog/getting-started-with-hyva"}
    },
    {
      "@type": "Person",
      "@id": "https://example.com/blog/author/jane-doe#person",
      "name": "Jane Doe",
      "jobTitle": "Senior Editor",
      "knowsAbout": ["Magento", "Hyva", "Performance"]
    },
    {
      "@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": "Hyva", "item": "https://example.com/blog/category/hyva"},
        {"@type": "ListItem", "position": 4, "name": "Getting started with Hyva", "item": "https://example.com/blog/getting-started-with-hyva"}
      ]
    }
  ]
}
```

`FAQPage` is added when the inline FAQ widget (`Panth_Faq`) is present on the page; `HowTo` is added when numbered H2 steps are detected. All schema emission is gated by admin toggles and validates against [Google's Rich Results Test](https://search.google.com/test/rich-results).

---

AI Integration (llms.txt + IndexNow)
------------------------------------

[](#ai-integration-llmstxt--indexnow)

### llms.txt

[](#llmstxt)

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

```
## Blog Posts

Latest articles from this site.

- [Getting started with Hyva](/blog/getting-started-with-hyva) — A practical walkthrough of installing Hyva and shipping your first storefront tweak.
- [Core Web Vitals for Magento in 2026](/blog/core-web-vitals-2026) — INP replaced FID. Here is what to measure and how to fix the common Magento regressions.
...

```

The number of posts surfaced is configurable via `panth_blog/aio/llms_txt_max_posts` (default 50). When disabled per store via `panth_blog/aio/llms_txt_include=0`, the section is silently omitted.

A structured `blog` section is also added to `/llms.json` for AI agent indexers — each entry includes `url`, `label`, `summary`, and `published_at` metadata.

### IndexNow

[](#indexnow)

The `Observer/PostSaveAfter.php` observer queues post URLs into 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, with `Panth_IndexNow` integration or direct API POST fallback.

Manual ping:

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

---

RSS / Atom Feeds
----------------

[](#rss--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 enabled)Each `` includes ``, ``, ``, `` (CDATA), optional ``, `` (RFC 822), ``, ``, optional ``. Standard namespaces: `xmlns:content`, `xmlns:dc`, `xmlns:media`, `xmlns:atom`.

Cache TTL, posts-per-feed, full vs partial content, and per-type feed toggles are all admin-configurable.

---

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

[](#markdown-export)

Every published post is reachable as plain markdown at `/blog/.md` with `Content-Type: text/markdown; charset=utf-8`. The output includes 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 and shipping your first storefront tweak.

## Why Hyva

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

Disable per store via `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 (categories + 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 tag thin-content robots flip globally
bin/magento panth:blog:tags:auto-robots

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

# Seed 5 demo authors / categories / tags / 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
