Seo images
Skill mvstepanek/nextjs-ecommerce-seo-skills/skills/seo-images
Image SEO and optimization rules for Next.js. Use when adding images, product photos, icons, banners, or working with the next/image component. Covers alt text, sizing, formats, lazy loading, and LCP optimization.From its SKILL.md
npx -y skills add mvstepanek/nextjs-ecommerce-seo-skills --skill seo-imagesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.2 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
Image SEO & Optimization Guidelines
Technical rules for image implementation in a Next.js e-commerce site.
Always Use next/image
- Never use raw
<img>tags — always use<Image>fromnext/image - next/image provides automatic: WebP/AVIF conversion, lazy loading, responsive sizing, blur placeholders
- Missing these optimizations directly hurts Core Web Vitals (LCP and CLS), which are ranking factors
// GOOD
import Image from 'next/image';
<Image src={product.imageUrl} alt="Blue Widget Pro 3000 - front view" width={800} height={600} />
// BAD - never do this
<img src={product.imageUrl} alt="product image" />
Alt Text Technical Requirements
The alt prop is required on every <Image> component. Search engines use alt text for image indexing and accessibility tools depend on it.
Rules
altprop must always be present — never omit it- Must not be empty on meaningful images — product photos, category heroes, and informational images must have descriptive alt text
- Only use
alt=""on purely decorative images (background patterns, visual separators) - Pass alt text from data — pull from CMS/PIM
altTextfield when available, fall back to product name + context
Examples by Image Type
| Image Type | Alt Pattern | Example |
|---|---|---|
| Product main | {Name} - {Key Spec or View} | "Blue Widget Pro 3000 - front view" |
| Product gallery | {Name} - {Angle/Detail} | "Blue Widget Pro 3000 - control panel detail" |
| Category hero | {Description of content} | "Range of wireless headphones from 20Hz to 40kHz" |
| Icon/decorative | "" (empty) | alt="" |
| Logo | {Company} logo | "Acme Corp logo" |
// GOOD — descriptive, from data
alt={`${product.name} - ${image.viewLabel}`}
// BAD
alt="product image"
alt="image_0"
alt="" // on a meaningful product image
alt={product.sku} // Not human-readable
Sizing & Layout Stability
- Always specify
widthandheight— or usefillwith a sized container - Missing dimensions cause CLS (Cumulative Layout Shift) — content jumps around as images load
- Use the image's intrinsic dimensions, not display dimensions
// GOOD - explicit dimensions
<Image src={url} alt={alt} width={800} height={600} />
// GOOD - fill mode with container
<div className="relative aspect-[4/3] w-full">
<Image src={url} alt={alt} fill className="object-cover" />
</div>
// BAD - no dimensions, causes CLS
<Image src={url} alt={alt} />
Priority & LCP Optimization
- Use
priorityon the LCP image — the largest above-the-fold image (usually the hero product photo) - Only 1-2 images per page should have
priority— it disables lazy loading and triggers preload - On product pages, the main product image is almost always the LCP element
// Product page hero image — this is the LCP element
<Image src={product.mainImage} alt={alt} width={800} height={600} priority />
// Gallery thumbnails — NOT priority, they're below fold or secondary
<Image src={product.thumbnail} alt={thumbAlt} width={200} height={150} />
Image Formats
Configure next.config.js for optimal format delivery:
// next.config.js
module.exports = {
images: {
formats: ['image/avif', 'image/webp'],
// If using an external image CDN:
remotePatterns: [
{ protocol: 'https', hostname: '*.your-cdn.com' },
],
},
};
- AVIF can be up to ~50% smaller than JPEG, WebP typically ~30% smaller (varies by image content and quality settings)
- next/image automatically serves the best format the browser supports
- If the image source is external, add the domain to
remotePatterns
Lazy Loading
- Default behavior is lazy loading — do not add
loading="lazy"manually (it's redundant) - Only override with
priorityfor above-the-fold images - Lazy loading prevents offscreen images from blocking initial page load
Blur Placeholder
Use blur placeholders for product images to reduce perceived loading time and CLS:
<Image
src={product.imageUrl}
alt={`${product.name} - ${image.viewLabel}`}
width={800}
height={600}
placeholder="blur"
blurDataURL={product.blurDataUrl} // Base64 tiny image
/>
Generate blurDataURL at build time or from the CMS/PIM system.
Common Technical Anti-Patterns
- Raw
<img>tags — always use next/image - Missing
altprop — every<Image>must havealt; use empty string only for decorative images - Empty alt on product images — only use
alt=""for purely decorative images - Missing dimensions — causes CLS, hurts Core Web Vitals
- Priority on every image — only the LCP image (1-2 per page) should have priority
- Enormous source images — if displaying at 800px wide, don't serve a 4000px source; use
sizesprop - Missing remote patterns — external images fail silently without
remotePatternsconfig
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most marketing audience skills give in ~1.2k tokens
Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07
- Apply Poppins font to headingsin 41 of 690, across 6 files
- Apply Lora font to body textin 41 of 690, across 6 files
- Use Arial fallback for headingsin 39 of 690, across 4 files
- Use Georgia fallback for body textin 39 of 690, across 4 files
- Maintain text hierarchy and formattingin 39 of 690, across 4 files
- Use accent colors for non-text shapesin 38 of 690, across 3 files
- Use RGB values for precise color matchingin 38 of 690, across 3 files
- Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
- Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
- Use active voice instead of passive voicein 26 of 690, across 10 files
- Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
- Prioritize clarity over clevernessin 22 of 690, across 8 files
Said here and by no other author read
- specify width and height attributes
- use empty alt text for decorative images
- add the priority property to above-the-fold images
- include the alt prop on every image
- pull alt text from data when available
- use fill with a sized container
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.