---
title: Footer
description: The storefront footer - copyright, Shopify policy links, social links, and optional menu columns.
type: guide
---

# Footer



The footer renders at the bottom of every page. By default it displays a copyright notice, every configured Shopify store policy, and optional social media links.

## How it works

**Policy links come from Shopify, not a hardcoded list.** The footer links to every policy configured in Shopify Admin, using the active locale, and each link disappears individually when that policy isn't configured — there's no separate allowlist to maintain. They render at `/policies/[handle]` and share the `policies` cache tag with the policy pages and static sitemap shard, so a policy edit in Shopify invalidates all three surfaces together.

**Social links are config-driven and hidden by default.** The `site.socialLinks` array in `shopConfig` (`shop.config.ts`) takes `{ platform, url }` entries — `platform` is one of `facebook`, `instagram`, `x`, `youtube`, `tiktok`, `pinterest`, `linkedin`, or `github`. The default is an empty array, which hides the section entirely; a non-empty array renders icons on the right side of the footer opposite the copyright.

```ts
// shop.config.ts
site: {
  name: process.env.NEXT_PUBLIC_SITE_NAME ?? "Vercel Shop",
  socialLinks: [
    { platform: "x", url: "https://x.com/mystore" },
    { platform: "instagram", url: "https://instagram.com/mystore" },
  ],
  url: trimTrailingSlash(process.env.NEXT_PUBLIC_BASE_URL || defaultUrl),
},
```

**The copyright line has no year by design.** It uses the `footer.copyright` i18n key with `shopConfig.site.name` interpolated in (`site.name` reads `NEXT_PUBLIC_SITE_NAME` and falls back to `"Vercel Shop"`). Reading `new Date()` for a year would force every page dynamic under Next.js 16 Cache Components, so the template omits it rather than trading that away by default.

## Out of the box

* **Copyright** — "© \{shopConfig.site.name}. All rights reserved.", editable via `footer.copyright` in `lib/i18n/messages/en.json`.
* **Policy links** — one link per Shopify-configured store policy, locale-aware.
* **Social links** — icons for any configured `site.socialLinks` entry, hidden when the array is empty.

## Common customizations

* **Shopify menu columns** — the [`enable-shopify-menus`](/docs/skills/enable-shopify-menus) skill adds link columns sourced from a Shopify `"footer"` menu above the copyright.
* **Branding** — set `NEXT_PUBLIC_SITE_NAME` or edit `shop.config.ts` to change the name; edit `lib/i18n/messages/en.json` to change the copyright wording itself.
* **A dynamic year** — add one only inside a `Suspense` boundary, since an unwrapped `new Date()` read would force the whole page dynamic under Cache Components.


---

For a semantic overview of all documentation, see [/sitemap.md](/sitemap.md)

For an index of all available documentation, see [/llms.txt](/llms.txt)

For agent-facing discovery, including API and MCP surfaces, see [/agents.md](/agents.md)