Install
$ agentstack add skill-mvstepanek-nextjs-ecommerce-seo-skills-seo-internal-linking ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Internal Linking SEO Guidelines
Follow these rules when building navigation, breadcrumbs, and cross-linking features.
Why Internal Linking Matters
Internal links distribute PageRank (ranking power) across your site and help search engines discover pages. A product page with 50 internal links pointing to it will outrank an identical page with only 1 internal link.
Use next/link for All Internal Links
- **Always use `
fromnext/link** for internal navigation — never raw` tags - next/link enables client-side navigation (faster) and prefetching (even faster)
- Raw `` tags trigger full page reloads
// GOOD
import Link from 'next/link';
{product.name}
// BAD
{product.name}
Breadcrumbs
Every page except the homepage should have visible breadcrumbs AND matching BreadcrumbList schema. Note: as of January 2025, Google no longer displays breadcrumbs in mobile search results (they still appear on desktop). Breadcrumbs remain valuable for desktop SERP display, site hierarchy understanding, and user navigation.
Implementation Rules
- Mirror the URL/site hierarchy — Home > Category > Subcategory > Product
- Every level is a clickable link except the current page
- Current page is plain text (not a link)
- Consistent across locales — same hierarchy, translated labels
- Visible in the page — not hidden, not only in schema
- Minimum 2 breadcrumb items required for Google to recognize the trail
- Represent the user's navigation path, not necessarily the URL hierarchy
// Example breadcrumbs component — adapt to your project
import Link from 'next/link';
import { JsonLd } from './JsonLd';
// Example import — use your project's actual config
import { siteConfig } from '@/config/site';
interface Crumb {
label: string;
href?: string;
}
export function Breadcrumbs({ items, locale }: { items: Crumb[]; locale: string }) {
const schema = {
"@type": "BreadcrumbList",
itemListElement: items.map((item, index) => ({
"@type": "ListItem",
position: index + 1,
name: item.label,
...(item.href ? { item: `${siteConfig.url}${item.href}` } : {}),
})),
};
return (
<>
{items.map((item, index) => (
{item.href ? (
{item.label}
) : (
{item.label}
)}
))}
);
}
// Usage on a product page:
Anchor Text
Anchor text (the clickable text of a link) tells search engines what the target page is about.
Rules
- Use descriptive text — the product name, category name, or action
- Never use "click here" or "read more" or "learn more" as the sole anchor text
- Include keywords naturally — "View our industrial widgets" not "click here for products"
- Vary anchor text — don't use the exact same text for every link to the same page
- Don't over-optimize — natural language, not keyword-stuffed
// GOOD
Wireless Headphones
{product.name} — {product.shortSpec}
// BAD
Click here
Read more
Link
Related Products / Cross-Linking
Product pages should link to related products:
- Same category — other products in a similar range
- Compatible accessories — add-ons, parts, maintenance kits for this product
- Upgrade/downgrade — next model up/down in the range
- Bundles — if this product is part of a bundle, link to the bundle
// components/RelatedProducts.tsx
export function RelatedProducts({ products, locale }: Props) {
return (
Related Products
{products.map(product => (
{product.name}
))}
);
}
Navigation (Header/Footer)
Header Navigation
- Include links to top-level categories
- Include subcategory links in dropdown menus
- Links should use the current locale prefix
- Include the language/country switcher
Footer Navigation
- Include links to: all top-level categories, FAQ, contact, legal, services
- Consistent across all pages and locales — same structure, translated labels
- Footer links help search engines discover important pages from every page on the site
Language Switcher
The language/country switcher MUST:
- Link to the same page in the target locale — not the homepage
- Preserve the full URL path — switching from
/en-GB/products/123/widget-proto French →/fr-FR/products/123/widget-pro - Be a visible, crawlable link — not hidden behind JavaScript-only interaction
- Use `` from next/link
// components/LanguageSwitcher.tsx
export function LanguageSwitcher({ currentLocale, currentPath }: Props) {
return (
{ALL_LOCALES.map(locale => (
{getLocaleName(locale)}
))}
);
}
Why the switcher matters for SEO: Search engine crawlers use the language switcher to discover locale variants of pages. If the switcher only links to homepages, crawlers won't efficiently find all localized versions.
Nofollow Usage
Use rel="nofollow" sparingly and only where appropriate:
| Link Type | nofollow? | Reason | |-----------|-----------|--------| | Internal navigation | No | You want PageRank to flow | | Internal product links | No | You want PageRank to flow | | External affiliate links | Yes | Paid/sponsored links | | User-generated content | Yes | Untrusted content | | Login/register links | Optional | Low SEO value | | Social media links | No | But they're external, so limited value |
Default rule: Do NOT add nofollow to internal links. Only add it to external untrusted or paid links.
// External affiliate link — use nofollow
Partner Name
// Internal link — NEVER nofollow
{productName}
Common Mistakes to Avoid
- Raw `` for internal links — always use next/link
- "Click here" anchor text — use descriptive text
- Language switcher linking to homepage — must preserve current page path
- Missing breadcrumbs — required on every page except homepage
- Breadcrumb schema without visible breadcrumbs — both must exist and match
- nofollow on internal links — never nofollow your own pages
- Orphan product pages — every product must be linked from at least one category page
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: mvstepanek
- Source: mvstepanek/nextjs-ecommerce-seo-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.