Template-Based Alt & Title Generation
Tokens — {{name}}, {{sku}}, {{store}}, {{category}} rendered per image in real time
Auto-generate SEO-optimized alt and title attributes for every product image on your storefront — from configurable templates with tokens ({{name}}, {{sku}}, {{store}}, {{category}}) and filters (truncate, title-case, strip, default, upp…
Key Features:
Additional Services
Built-in from day one. No add-ons, no upsell, no licence keys to renew.
Tokens — {{name}}, {{sku}}, {{store}}, {{category}} rendered per image in real time
Scope-respecting — every setting is configurable at default / website / store view level
Product detail page — main gallery image alt + caption + title
Preserves merchant-authored labels — if a product has a custom image label set in admin, that takes precedence
Runs inline — no external API calls, no DB writes, pure template rendering
MEQP compliant — follows Adobe's Magento Extension Quality Program standards
Image SEO - Template-Based Alt/Title for Magento 2 Product Images. Panth Image SEO auto-generates SEO-optimized alt and title attributes for every product image in Magento 2 from configurable templates. Tokens for name, SKU, store, category. Filters for truncate, title-case, strip, default. Works across category grids, product galleries, widgets, cross-sells. Compatible with Magento 2.4.4 - 2.4.8, PHP 8.1 - 8.4, Hyva and Luma themes.
Engineered for magento 2 image seo, magento 2 image alt text, magento 2 alt attribute — ships with sensible defaults, full admin controls, and zero JavaScript bloat. Works identically on Hyva and Luma; passes Adobe MEQP with zero severity-10 violations.
Auto-generate SEO-optimized alt and title attributes for every product image on your storefront — from configurable templates with tokens (
{{name}},{{sku}},{{store}},{{category}}) and filters (truncate, title-case, strip, default, upper, lower). One setting, every image on every theme, every store view.
Panth Image SEO replaces Magento 2's empty or generic image alt/title attributes with fully rendered, merchant-controlled templates. The module runs everywhere images show up — category grids, product galleries, related products, upsells, cross-sells, widgets, search results — so the HTML your shoppers (and search engines) see always includes meaningful, keyword-rich alt text. Compatible with both Hyva and Luma themes, scope-aware (store-view granularity), and tested with Magento sample data.
Get a free quote for your project in 24 hours — custom modules, Hyva themes, performance optimization, M1→M2 migrations, and Adobe Commerce Cloud.
Kishan SavaliyaTop Rated Plus on Upwork 100% Job Success • 10+ Years Magento Experience Adobe Certified • Hyva Specialist |
Panth Infotech AgencyMagento Development Team Custom Modules • Theme Design • Migrations Performance • SEO • Adobe Commerce Cloud |
Visit our website: kishansavaliya.com | Get a quote: kishansavaliya.com/get-quote
{{name}}, {{sku}}, {{store}}, {{category}} rendered per image in real time|truncate:N, |title, |lower, |upper, |strip, |default:'value' inside any token— Image 2 of 5)Image / main product photo / filename placeholders get upgraded automaticallyVisionAdapterInterface lets you swap in OpenAI Vision / Claude Vision for AI-generated fallback alt textImage alt text is one of the most under-optimized and highest-leverage SEO signals for eCommerce:
alt="" or alt="Image" are invisible.Manually writing alt text for every product (or every image within every product) doesn't scale past a small catalog. Panth Image SEO lets one merchant-controlled template render correct, scope-aware alt text across the entire catalog in one pass — and refresh instantly when you change the template.

The admin UI exposes every setting at store-view scope: master toggle, alt template, title template, and gallery-injection toggle. Token and filter reference is inlined under each field so the merchant never has to leave the page to find the syntax.
Before: <img alt=""> or <img alt="Image"> — invisible to image search, fails accessibility audits. After: <img alt="Premium Leather Bag - Luma Store View"> — indexed, accessible, on-brand across every store view.
| 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 |
| MySQL | 8.0+ |
| MariaDB | 10.4+ |
| Hyva Theme | 1.0+ (native support) |
| Luma Theme | Native support |
| Required Dependency | mage2kishan/module-core ^1.0 |
| Suggested Integration | mage2kishan/module-productgallery (auto-wires into the custom gallery) |
composer require mage2kishan/module-image-seo
bin/magento module:enable Panth_Core Panth_ImageSeo
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento cache:flush
app/code/Panth/ImageSeo/ in your Magento installationPanth_Core is installed (required dependency)bin/magento module:enablebin/magento module:status Panth_ImageSeo
# Expected output: Module is enabled
Navigate to Admin → Stores → Configuration → Panth Extensions → Image SEO to configure the module.
| Setting | Default | Scope | Description |
|---|---|---|---|
| Enable Template-Based Image Alt/Title | Yes | Store View | Master toggle. When No, Magento's native alt/title behavior is used and all plugins are no-ops. |
| Alt Text Template | {{name}} - {{store}} |
Store View | Template rendered into every <img alt=""> attribute. Supports tokens and filters. |
| Title Text Template | {{name}} |
Store View | Template rendered into every <img title=""> attribute. Same token syntax; falls back to alt text when empty. |
| Apply to Gallery Images JSON | Yes | Store View | Also injects alt/title into the product gallery images JSON (used by fotorama and Hyva gallery widgets). |
All four settings are scope-aware. Configure a shorter alt template on a mobile-focused store view, a different brand suffix on a wholesale store, or different language alt text per localized store — Magento's scope hierarchy handles the rest.
Every token is written as {{tokenName}} and can be combined with filters using |filterName:arg.
| Token | Value | Example Output |
|---|---|---|
{{name}} |
Product name | Push It Messenger Bag |
{{sku}} |
Product SKU | 24-WB04 |
{{store}} |
Current store view name | Luma Store View, Default Store View, English, Wholesale |
{{category}} |
Current category name (when resolvable) | Bags, Women's Tops |
Unknown tokens render as empty strings, so a template like Brand: {{brand}} / {{name}} safely falls back to Brand: / Push It Messenger Bag if the brand token isn't wired up yet. Trailing separators are auto-cleaned.
Filters are chained with | and run left-to-right.
| Filter | Syntax | Effect | Example |
|---|---|---|---|
truncate |
|truncate:N |
Clip to N characters, append … |
{{name|truncate:20}} → Push It Messenger B… |
title |
|title |
Title-case (first letter of each word uppercase) | {{name|lower|title}} → Push It Messenger Bag |
upper |
|upper |
UPPERCASE the value | {{sku|upper}} → 24-WB04 |
lower |
|lower |
lowercase the value | {{name|lower}} → push it messenger bag |
strip |
|strip |
Remove HTML tags and collapse whitespace | {{name|strip}} |
default |
|default:'Fallback' |
Use the argument when the value is empty | {{category|default:'Catalog'}} → Catalog |
Filters can be chained: {{name|lower|title|truncate:40}} is valid.
Alt: {{name}} - {{store}}
Title: {{name}}
Renders as:
Push It Messenger Bag - Luma Store View
Alt: {{name|truncate:80}} | Buy Online at {{store}}
Title: {{name}} — {{store}}
Alt: {{name}} in {{category|default:'our catalog'}}
Title: {{name}}
Alt: [{{sku|upper}}] {{name}} | {{store}}
Title: {{name|truncate:60}}
Alt: {{name}}
Title: {{name}}
Configure Alt Text Template at the store-view scope:
{{name}} | Premium Quality from {{store}}{{name}} | Qualité Premium - {{store}}[WHOLESALE] {{name}} - {{store}}The module hooks every surface where Magento renders an <img> tag for a product:
| Surface | Plugin | What gets injected |
|---|---|---|
| Category page tiles | ImageFactoryPlugin |
<img alt="…"> on every product card |
| Related / Upsell / Cross-sell | ImageFactoryPlugin |
Widget product image alt |
| Search results grid | ImageFactoryPlugin |
Thumbnail alt on every result |
| Product gallery (main image) | GalleryImageSeoPlugin |
caption field in gallery JSON |
| Product gallery (thumbnails) | GalleryImageSeoPlugin |
caption + position suffix (— Image 2 of 5) |
| Product page label | ImageAttributesPlugin + ProductImagePlugin |
Helper-level getLabel() return value |
| Admin image uploader | UploaderPlugin |
Default label on newly uploaded images |
| CMS widgets (New, Featured, …) | ImageFactoryPlugin |
Widget image alt |
| Panth_ProductGallery | Soft DI wire | When installed, injects ImageTemplateResolver into the custom gallery |
This breadth matters because Magento 2 has four different code paths that eventually render a product <img>:
Magento\Catalog\Block\Product\ImageFactory::create — used by category grids, widgets, related/upsell/cross-sellMagento\Catalog\Helper\Image::getLabel — used by some themes directlyMagento\Catalog\Block\Product\View\Gallery::getGalleryImagesJson — the product gallery JSONMissing any one of these leaves a gap where alt text stays blank or reverts to the Magento default. Panth Image SEO plugs all four, so the rendered HTML across your entire storefront is uniformly template-driven.
| Issue | Cause | Resolution |
|---|---|---|
| Alt text not changing on the storefront | FPC holding pre-install HTML | Run bin/magento cache:flush once after install |
| Category tile alt shows only product name, no store suffix | Old version (<1.0.1) without ImageFactoryPlugin |
Upgrade to v1.0.1+ via composer update mage2kishan/module-image-seo |
| Gallery main image caption shows "Image" | Old version (<1.0.1) with restricted placeholder detection | Upgrade to v1.0.1+ |
| Token renders as empty string | Unknown token name, or context variable not available | Check token spelling; see Token Reference |
| Different alt text across store views not respected | Setting edited at default scope | Switch scope dropdown to the specific store view before editing |
| Admin config page shows but options don't save | Admin user lacks permission on Panth_ImageSeo::config |
Grant the ACL resource under System → Permissions → User Roles |
| Gallery caption shows name only, no position suffix | Single-image product | Position suffix is only added for galleries with 2+ images (intentional) |
| Site slow after install | Missing bin/magento setup:di:compile in production mode |
Run DI compile + static content deploy in production mode |
No. Merchant-authored labels (anything other than empty, the product name, Image, main product photo, or the raw filename) are preserved. Only Magento's default placeholders get upgraded to template output.
Yes. The module injects into getGalleryImagesJson, which Hyva reads for its Alpine.js gallery. Category tile alt attributes go through ImageFactory, which Hyva's product/list.phtml also uses.
Yes. Luma's fotorama gallery reads from the same caption field, and Luma's category grid uses the same ImageFactory path.
Yes. mage2kishan/module-core is a required dependency and is pulled in automatically by Composer. Core provides the admin tab layout and common utilities.
Yes. The module ships with a VisionAdapterInterface and a NullVisionAdapter default. You can swap the preference in your di.xml to a custom adapter that calls OpenAI Vision, Claude Vision, or Google Cloud Vision for a vision-generated alt as the fallback when templates render empty. The vision adapter only fires when no template output was produced.
Yes. Every configuration setting respects Magento's standard scope hierarchy (default → website → store view). Configure a different alt template per store view and the plugins automatically honor it.
title attribute on <img> tags?The module renders a separate title template so you can produce short, branded titles ({{name}}) while the alt attribute carries the SEO keyword copy ({{name}} | {{store}} | {{category}}).
Yes. Flip the master toggle to No in admin config and all plugins become no-ops instantly. The module's index data is not deleted, so re-enabling is instant.
No. The module is pure template rendering — no DB tables created, no writes. All state lives in Magento's cached scope config.
Set Apply to Gallery Images JSON to No. The master toggle stays on, so category tiles and widgets still get template alt; only the gallery JSON is left untouched.
Yes. The module doesn't cache anything itself — it relies on Magento's native block cache and FPC. Template rendering is idempotent, so cache hit rate is unaffected.
| Channel | Contact |
|---|---|
| kishansavaliyakb@gmail.com | |
| Website | kishansavaliya.com |
| +91 84012 70422 | |
| GitHub Issues | github.com/mage2sk/module-image-seo/issues |
| Upwork (Top Rated Plus) | Hire Kishan Savaliya |
| Upwork Agency | Panth Infotech |
Response time: 1-2 business days.
Looking for custom Magento module development, Hyva theme customization, store migrations, or performance optimization? Get a free quote in 24 hours:
Specializations:
Panth Image SEO is licensed under a proprietary license — see LICENSE.txt. One license per Magento installation.
Built and maintained by Kishan Savaliya — kishansavaliya.com — a Top Rated Plus Magento developer on Upwork with 10+ years of eCommerce experience.
Panth Infotech is a Magento 2 development agency specializing in high-quality, security-focused extensions and themes for both Hyva and Luma storefronts. Our extension suite covers SEO, performance, checkout, product presentation, customer engagement, and store management — over 34 modules built to MEQP standards and tested across Magento 2.4.4 to 2.4.8.
Browse the full extension catalog on the Adobe Commerce Marketplace or Packagist.
Ready to fix your image SEO across the entire catalog?
SEO Keywords: magento 2 image seo, magento 2 image alt text, magento 2 alt attribute, magento 2 image title, magento 2 product image seo, magento 2 seo extension, magento 2 image optimization, magento 2 auto alt text, magento 2 bulk alt text, magento 2 image alt generator, magento 2 seo alt tags, magento 2 category image seo, magento 2 gallery alt text, magento 2 widget image alt, magento 2 wcag compliance, magento 2 accessibility alt, hyva image seo, hyva alt text, hyva image optimization, luma image seo, luma alt text, magento 2 image search seo, magento 2 google images, magento 2 multi-store alt text, magento 2 localized alt text, magento 2 alt template, magento 2 alt tokens, magento 2 image label extension, magento 2 AI alt text, magento 2 vision alt text, mage2kishan image seo, panth infotech image seo, kishan savaliya magento, magento 2.4.8 image seo, magento 2 PHP 8.4 image seo, hire magento developer upwork, top rated plus magento freelancer, custom magento development, adobe commerce image seo, magento 2 alt automation, magento 2 bulk image optimization
| Module Category | SEO & Indexing |
|---|---|
| Best For | All Sizes |
No. Merchant-authored labels (anything other than empty, the product name, Image, main product photo, or the raw filename) are preserved. Only Magento's default placeholders get upgraded to template output.
Yes. The module injects into getGalleryImagesJson, which Hyva reads for its Alpine.js gallery. Category tile alt attributes go through ImageFactory, which Hyva's product/list.phtml also uses.
Yes. Luma's fotorama gallery reads from the same caption field, and Luma's category grid uses the same ImageFactory path.
Yes. mage2kishan/module-core is a required dependency and is pulled in automatically by Composer. Core provides the admin tab layout and common utilities.
Yes. The module ships with a VisionAdapterInterface and a NullVisionAdapter default. You can swap the preference in your di.xml to a custom adapter that calls OpenAI Vision, Claude Vision, or Google Cloud Vision for a vision-generated alt as the fallback when templates render empty. The vision adapter only fires when no template output was produced.
Yes. Every configuration setting respects Magento's standard scope hierarchy (default → website → store view). Configure a different alt template per store view and the plugins automatically honor it.
The module renders a separate title template so you can produce short, branded titles ({{name}}) while the alt attribute carries the SEO keyword copy ({{name}} | {{store}} | {{category}}).
Yes. Flip the master toggle to No in admin config and all plugins become no-ops instantly. The module's index data is not deleted, so re-enabling is instant.
No. The module is pure template rendering — no DB tables created, no writes. All state lives in Magento's cached scope config.
Set Apply to Gallery Images JSON to No. The master toggle stays on, so category tiles and widgets still get template alt; only the gallery JSON is left untouched.
Panth Malware Scanner is built specifically for Magento 2 filesystems — it understands the directory layout, knows which folders are writable from the frontend, and ships signatures tuned for Magento-targeted threats (Magecart skimmers, PolyShell webshells, admin-layout injection). Traditional AV tools scan everything with generic signatures and produce noise.
Yes. The module ships dedicated Hyva templates built with Alpine.js and Tailwind CSS. Theme detection is automatic via Panth_Core.
No. Panth Core is completely free and will remain free forever. It is the foundation library that other (paid) Panth extensions depend on.
No. Merchant-authored labels (anything other than empty, the product name, Image, main product photo, or the raw filename) are preserved. Only Magento's default placeholders get upgraded to template output.
No — any valid WhatsApp number works. However, a WhatsApp Business account is strongly recommended for commercial use (auto-replies, labels, catalog).
Yes, on the product detail page. When the module is enabled, the default gallery.phtml is replaced with the Panth gallery (one template for Hyva, another for Luma — chosen automatically).
Unlimited. Each form has a unique identifier and its own submissions scope.
No. The head block is cacheable="true" so the full JSON-LD payload is baked into full-page cache. Providers only run on uncached renders; cached hits serve the pre-rendered <script> tag with zero PHP evaluation.
Yes. The module ships with two purpose-built templates — Alpine.js + Tailwind for Hyva and vanilla JS for Luma — and auto-switches based on your active storefront theme.
Yes. When enabled, Panth Footer takes over the footer.container block and renders its own configurable footer. You can disable it any time to restore the default footer.
Talk to Kishan directly — written quote, scope and timeline within 24 hours. No sales call.
Image SEO — Alt & Title Generator for Magento 2