**TL;DR.** Internal linking distributes link equity, signals topical relationships, and improves crawl efficiency. The high-leverage patterns for ecommerce: breadcrumbs, related products, frequently-bought-together, category hubs with descriptive anchor text, and editorial-to-commercial cross-linking from blog content. Avoid nofollow on internal links and avoid over-linking.

## Why internal linking matters

Three benefits, in priority order:

1. **Crawl efficiency**: Google's crawl budget is finite. Internal links signal which pages matter and how often to recrawl.
2. **Equity distribution**: each internal link passes a fraction of the source page's authority to the target. Hub pages with many incoming links rank for competitive queries.
3. **Topical clustering**: pages linked together in a hub-and-spoke pattern signal a topical cluster, which AI engines especially reward.

## Audit your current graph

Free and paid tools:

- **Screaming Frog SEO Spider** (free up to 500 URLs, paid for more): crawls your site and shows internal link counts per URL.
- **Sitebulb**: similar with more visualizations.
- **Ahrefs Site Audit**: paid, includes link-equity flow visualizations.

Look for:

- **Orphan pages**: zero internal links pointing to them. They get crawled rarely, rank poorly, and waste catalog space.
- **Over-linked pages**: homepage with 500+ links splits equity thinly.
- **Low-equity commercial pages**: PLPs with high commercial intent but few inbound internal links.

## Breadcrumbs

The simplest and most impactful pattern. Visible breadcrumb on every page:

```html
<nav aria-label="Breadcrumb">
  <ol>
    <li><a href="/">Home</a></li>
    <li><a href="/categories">Categories</a></li>
    <li><a href="/categories/leather-bags">Leather Bags</a></li>
    <li><a href="/categories/leather-bags/messenger">Messenger Bags</a></li>
    <li aria-current="page">Brown Leather Messenger Bag</li>
  </ol>
</nav>
```

Plus matching `BreadcrumbList` JSON-LD (which Google uses for the breadcrumb display in SERPs).

Breadcrumbs distribute equity from PDPs (which often have the most inbound external links) upward to categories.

## Related products

On every PDP, surface 4–8 similar products. The 2026 default uses pgvector cosine similarity on the product's `descriptionEmbedding`:

```sql
SELECT id, name, slug, image_url
FROM products
WHERE id != $1
  AND category_id = (SELECT category_id FROM products WHERE id = $1)
ORDER BY description_embedding <=> (
  SELECT description_embedding FROM products WHERE id = $1
)
LIMIT 8;
```

Render with real `<a>` tags (no client-side fetch):

```html
<aside>
  <h2>Related products</h2>
  <ul>
    <li>
      <a href="/products/black-leather-messenger" rel="related">
        <img src="/.../black-messenger.avif" width="200" height="200" alt="Black leather messenger bag" />
        Black Leather Messenger Bag
      </a>
    </li>
    <!-- ... -->
  </ul>
</aside>
```

## Frequently bought together

A targeted pattern for products with co-purchase data. Compute from order-item co-occurrence:

```sql
SELECT b.id, b.name, COUNT(*) AS co_purchase_count
FROM order_items a
JOIN order_items b ON a.order_id = b.order_id AND a.product_id != b.product_id
WHERE a.product_id = $1
GROUP BY b.id, b.name
HAVING COUNT(*) >= 5
ORDER BY co_purchase_count DESC
LIMIT 3;
```

Display as a bundle (covered in the [PDP UX guide](/guides/pdp-ux-conversion-optimization)). The links pass equity in addition to driving bundle conversion.

## Category hub pages

A category hub page lists subcategories with descriptive anchors:

```html
<h1>Leather Bags</h1>
<p>Browse our handcrafted leather bag collection.</p>

<section>
  <h2>Shop by style</h2>
  <ul>
    <li><a href="/categories/leather-bags/messenger">Messenger Bags</a></li>
    <li><a href="/categories/leather-bags/tote">Tote Bags</a></li>
    <li><a href="/categories/leather-bags/backpack">Leather Backpacks</a></li>
    <li><a href="/categories/leather-bags/wallet">Leather Wallets</a></li>
  </ul>
</section>

<section>
  <h2>Shop by color</h2>
  <ul>
    <li><a href="/categories/leather-bags/color-brown">Brown Leather Bags</a></li>
    <li><a href="/categories/leather-bags/color-black">Black Leather Bags</a></li>
    <li><a href="/categories/leather-bags/color-tan">Tan Leather Bags</a></li>
  </ul>
</section>
```

Each subcategory and blessed-facet URL gets one strong link from the parent. The anchor text matches the target's title/H1, which reinforces topical relevance.

## Editorial to commercial cross-linking

The under-used pattern. Blog posts and guides about your category should link to:

- The relevant category page.
- 2–4 specific products as examples.
- Related guides.

Example: a blog post titled "How to choose a leather messenger bag" links:

- `[Browse our messenger bag collection](/categories/leather-bags/messenger)`
- `[the Acme Brown Leather Messenger Bag](/products/acme-brown-messenger)`
- `[How to care for leather](/guides/leather-care-guide)`

Editorial pages tend to attract external backlinks. Internal links from those pages flow that equity to commercial pages.

## Anchor text patterns

Good anchors:

- `[Brown leather messenger bags](/categories/leather-bags/color-brown)` — descriptive, matches the target.
- `[Acme's full-grain leather collection](/categories/leather)` — descriptive, brand-included.
- `[How we make our leather bags](/guides/leather-craftsmanship)` — descriptive, signal-rich.

Bad anchors:

- "click here"
- "read more"
- "this product"
- "shop now"

Generic anchors waste the signal. Descriptive anchors with target keywords help both users and search engines understand what's on the other end.

## Over-linking

Practical limits per page:

| Page type        | Total outbound internal links | Notes                                       |
| ---------------- | ----------------------------- | ------------------------------------------- |
| Homepage         | 30–80                         | Hero, primary categories, featured products  |
| Category hub     | 80–200                        | Includes subcategories, brands, products     |
| PLP (paginated)  | 40–80 per page                 | Products + facets + pagination               |
| PDP              | 30–80                         | Breadcrumb + related + FBT + nav + footer    |
| Blog post        | 20–50                         | Inline links + nav + footer                  |

Above these counts, each link passes diminishing equity. Below means under-distributing.

## Tracking effectiveness

After implementing a new internal linking strategy:

1. Re-crawl with Screaming Frog. Verify orphan count dropped, hub-page link counts increased.
2. Watch Google Search Console → Performance → Pages for 4–8 weeks. Previously-orphan pages should gain impressions.
3. Track conversion lift from PDPs with related products and FBT.

## How Ordiko handles internal linking

- Visible breadcrumbs on every page with BreadcrumbList schema.
- Related products on PDP via pgvector cosine on `descriptionEmbedding`.
- Frequently-bought-together via `orderItems` co-occurrence.
- Category hub pages auto-generated with subcategory + blessed-facet links.
- AI-suggested internal links at `/seo/internal-links` — analyzes blog/guide content and proposes contextual links to commercial pages.
- Recently-viewed widget on PDP and home (passes equity to recent product pages).

## FAQ

**How many internal links per page is too many?**
Google has no hard limit, but practical usability and crawl efficiency suggest 50–150 unique outbound links per page on a typical PDP, more on a category hub. Over 300 links per page dilutes the equity each link passes.

**Do nofollow internal links waste equity?**
Don't use nofollow on internal links. The 'PageRank sculpting' practice from the 2010s no longer works as advertised. Nofollow internal links lose the equity entirely rather than redistributing it.

**Should related products use rel='related'?**
Yes if available — `rel='related'` is a valid HTML relationship hint. It doesn't change Google's link evaluation but signals intent to other parsers (including AI engines).

**How does Ordiko build internal links?**
Ordiko renders visible breadcrumbs on every page, related products via pgvector cosine on description embeddings, frequently-bought-together via order co-occurrence, and an internal-link AI suggester at /seo/internal-links that proposes contextual links from blog/guide content to commercial pages.
