Chat on WhatsApp

Panth Blog for Magento 2

Ship a real blog on Magento 2, not a Page Builder kludge. Panth Blog is a production-grade content engine with hierarchical categories, tags, multi-author profiles, threaded comments, BlogPosting/Person/BreadcrumbList/FAQPage/HowTo JSON-LD schema, llms.txt + Markdown export fo...

Key Features:

  • Full JSON-LD schema graph (BlogPosting, Person, Breadcrum...
  • AI-ready integration via llms.txt, llms.json, and per-pos...
  • Automatic IndexNow pinging to Bing + Yandex on publish, u...
  • RSS 2.0 + Atom 1.0 feeds

Additional Services

$0.00
In stock
SKU
panth-blog
Links
Lifetime Updates Every Magento release
1-Year Free Support Email + WhatsApp
Adobe-Certified Magento 2 Developer
30-Day Money Back No-questions refund
What you get

Everything in the box

Built-in from day one. No add-ons, no upsell, no licence keys to renew.

Full JSON-LD schema graph (BlogPosting, Person, Breadcrum...

AI-ready integration via llms.txt, llms.json, and per-pos...

Automatic IndexNow pinging to Bing + Yandex on publish, u...

RSS 2.0 + Atom 1.0 feeds

site-wide, per-category, per-tag, per-author variants, cached with TTL

Overview

Panth Blog is a content publishing module for Magento 2 and Adobe Commerce that adds posts, categories, tags, and authors with clean URLs, GraphQL APIs, and Hyva-ready storefront components.

The Panth Blog module gives merchants a full editorial workflow without a separate CMS. Authors compose posts in a TinyMCE-powered admin grid that mirrors the native Magento UI — sticky headers, inline filters, mass actions, bookmark profiles, and per-column visibility — so the learning curve is zero for any admin who already runs the product grid. Sample-content seeding creates five posts, categories, tags, and authors on demand, and re-running the seeder is idempotent.

A custom router resolves canonical paths without query strings, and the schema layer emits BlogPosting JSON-LD so Google can extract titles, authors, and publish dates. Frontend rendering works on Hyva and Luma without theme edits, and the GraphQL and REST endpoints let headless storefronts consume the same data the synchronous templates do. Tags and categories each get their own indexable archive page, and the sitemap generator publishes every post URL so newly written content reaches Google within one crawl cycle.

Best for:

  • Magento merchants who want a content hub without bolting on WordPress.
  • Headless and Hyva storefronts that need GraphQL blog data.
  • SEO teams shipping BlogPosting schema for organic visibility.

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/<slug>.md endpoint.
  7. Native REST + GraphQL — full CRUD via REST, read-only GraphQL for headless storefronts.

What you get

Panth Blog ships a complete content stack — admin grids, schema, APIs, and storefront templates.

  • Posts, categories, tags, and authors with TinyMCE-powered admin editing.
  • Clean canonical URLs with no query strings via a custom router.
  • BlogPosting JSON-LD schema for Google rich result eligibility.
  • GraphQL and REST APIs for headless and PWA storefronts.
  • Hyva and Luma storefront templates with no theme edits required.

Key Features

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 & Structured Data

  • JSON-LD per page type:
  • /blogBlog + BreadcrumbList
  • /blog/<slug>BlogPosting + Person (author) + BreadcrumbList + optional FAQPage + optional HowTo
  • /blog/category/<slug>CollectionPage + BreadcrumbList
  • /blog/tag/<slug>CollectionPage + BreadcrumbList
  • /blog/author/<slug>ProfilePage + Person + BreadcrumbList
  • OG + Twitter metaog: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)

  • 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 <aside data-aeo="tldr"> callout above the article
  • Table of contents — auto-built from <h2> and <h3> headings with anchor IDs; sticky on desktop, drawer on mobile
  • HowTo schema — auto-detected from numbered <h2> steps (e.g. <h2>1. First step</h2>); admin toggle
  • FAQPage schema — inline FAQ widget integration via Panth_Faq adds FAQPage JSON-LD to the post graph
  • Citation footnotescitation_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)

  • 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/<slug>.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)

  • 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 flagsnotify_on_publish, notify_on_update, notify_on_delete admin toggles
  • Manual ping CLIpanth:blog:indexnow:ping --post-id=N

Feeds & Discovery

  • RSS 2.0/blog/feed.xml site-wide; /blog/feed/category/<slug>.xml, /blog/feed/tag/<slug>.xml, /blog/feed/author/<slug>.xml (per-type toggles)
  • Atom 1.0/blog/feed/atom.xml
  • Full or partial content — toggle <content:encoded> per feed
  • RFC 822 timestamps, <dc:creator>, <media:content>, <atom:link rel="self">
  • Cachedpanth_blog_feed cache type with configurable TTL; warmed by cron
  • Feed discovery<link rel="alternate" type="application/rss+xml"> in every blog page <head>

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 > Blog > Category > 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

  • Strict DI — zero ObjectManager calls, constructor property promotion throughout
  • PHP 8.1+ — readonly properties, named arguments, match expressions
  • Type-safe contractsdeclare(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)
  • GraphQLpanthBlogPosts, 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

Admin Management

  • Manage PostsPanth 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 CategoriesPanth Infotech → Blog → Manage Categories — hierarchical tree, banner image, per-category template + posts-per-page overrides
  • Manage TagsPanth Infotech → Blog → Manage Tags — flat list with post-count and robots column
  • Manage AuthorsPanth Infotech → Blog → Manage Authors — display name, role, avatar, bio, social links JSON, knowsAbout/alumniOf/sameAs schema fields
  • Manage CommentsPanth 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.


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.


AI Integration (llms.txt + IndexNow)

llms.txt

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

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

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

Endpoint Format Scope
/blog/feed.xml RSS 2.0 Site-wide latest N posts
/blog/feed/atom.xml Atom 1.0 Site-wide latest N posts
/blog/feed/category/<slug>.xml RSS 2.0 Per category
/blog/feed/tag/<slug>.xml RSS 2.0 Per tag
/blog/feed/author/<slug>.xml RSS 2.0 Per author
/blog/feed/comments.xml RSS 2.0 Latest 25 approved comments (when comments enabled)

Each <item> includes <title>, <link>, <guid isPermaLink="true">, <description> (CDATA), optional <content:encoded>, <pubDate> (RFC 822), <dc:creator>, <category>, optional <media:content>. 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

Every published post is reachable as plain markdown at /blog/<slug>.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.


Compatibility

Requirement Versions Supported
Magento Open Source 2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8
Adobe Commerce 2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8
Adobe Commerce Cloud 2.4.4 — 2.4.8
PHP 8.1.x, 8.2.x, 8.3.x, 8.4.x
Hyva Theme 1.3+ (Tailwind + Alpine.js)
Luma Theme Native 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

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

  1. Download the latest release ZIP from Packagist or the Adobe Commerce Marketplace
  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

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

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

Navigate to Stores → Configuration → Panth → Blog.

Group Key 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 links

All settings are store-view scoped where applicable; comma-separated lists like the AI bot allow-list are parsed into arrays by Helper\Config.


License

Proprietary © Panth Infotech. All rights reserved. See LICENSE.txt for details.

URL Structure

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

Path Page
/blog Index — featured post + grid
/blog/page/2 Paginated index
/blog/<slug> Single post
/blog/<slug>.md Markdown export of single post
/blog/category/<slug> Category landing
/blog/category/<slug>/page/2 Paginated category
/blog/tag/<slug> Tag landing
/blog/author/<slug> 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/<slug>.xml Per-category RSS
/blog/feed/tag/<slug>.xml Per-tag RSS
/blog/feed/author/<slug>.xml Per-author RSS

The 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.


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

Job Schedule Purpose
panth_blog_publish_scheduled every 5 min Flip scheduled posts to published when published_at <= NOW()
panth_blog_refresh_post_counts nightly 03:30 Recompute denormalised post counts on categories + tags; apply tag thin-content robots
panth_blog_warm_feed_cache hourly :15 Regenerate RSS / Atom feeds and store in panth_blog_feed cache
panth_blog_notify_indexnow every 5 min Drain IndexNow queue (publishes accumulated since last run)
panth_blog_archive_stale_drafts weekly Sun 05:00 Move drafts older than 180 days to archived
panth_blog_heartbeat daily 08:00 Install reporter heartbeat (suppressed when Panth_Core consolidates pings)

REST &amp; GraphQL APIs

REST endpoints

GET /V1/panth-blog/posts — list (anonymous)
GET /V1/panth-blog/posts/:id — single by ID (anonymous)
POST /V1/panth-blog/posts — create (admin token)
PUT /V1/panth-blog/posts/:id — update (admin token)
DELETE /V1/panth-blog/posts/:id — delete (admin token)

# Same shape for /V1/panth-blog/categories, /V1/panth-blog/tags, /V1/panth-blog/authors

GraphQL queries (read-only)

{
 panthBlogPosts(filter: {category_url_key: "hyva"}, pageSize: 10, currentPage: 1) {
 items {
 post_id
 url_key
 title
 short_description
 featured_image
 published_at
 reading_time_min
 author_id
 }
 total_count
 page_info { current_page page_size total_pages }
 }
 panthBlogPost(urlKey: "getting-started-with-hyva") {
 post_id title content tldr_summary word_count
 }
 panthBlogCategories { category_id url_key name post_count }
 panthBlogTags { tag_id url_key name post_count }
 panthBlogAuthors { author_id url_key display_name role short_bio }
}

Need this customised?

Talk to Kishan directly — written quote, scope and timeline within 24 hours. No sales call.

WhatsApp

Panth Blog for Magento 2

$0.00