Version 2025-07 is the last API version to support React-based UI components. Later versions use web components, native UI elements with built-in accessibility, better performance, and consistent styling with Shopify's design system. Check out the migration guide to upgrade your extension.
Footer
The footer appears at the bottom of every customer account page, below the links to store policies. Use the footer to display persistent content that's visible across all pages, including Order index, Order status, Profile, Settings, and any full-page extensions.
Anchor to Use casesUse cases
- Cookie consent: Display a cookie consent banner that appears across all customer account pages, allowing customers to manage their tracking preferences.
- Global announcements: Show store-wide notices, such as holiday shipping deadlines or service updates, that apply to the entire customer account experience.
- Accessibility aids: Provide persistent accessibility tools or links that customers can access from any page.
- Legal compliance: Display required legal notices, privacy policy links, or regulatory disclosures that must be visible site-wide.
Use the static extension target below to extend the footer on all customer account pages with persistent, globally visible content.
Since this target renders on every page, it's well-suited for cross-cutting concerns like consent management. The examples demonstrate using the Customer Privacy API to manage cookie consent, as well as rendering static content in the footer.
To use the Customer Privacy API, you must enable the collect_buyer_consent capability in your TOML configuration file.
To use the Customer Privacy API, you must enable the collect_buyer_consent capability in your TOML configuration file.
customer-account.footer.render-after
Renders a static extension target below the footer on all customer account pages.
To prevent layout shifting, avoid dynamic data fetching and rendering in this target. If you need to render dynamic content, consider reserving space for your content while it is loading using Spinner.
Supported components
- Avatar
- Badge
- Banner
- Block
Layout - Block
Spacer - Block
Stack - Button
- Card
- Checkbox
- Choice
- Choice
List - Clipboard
Item - Customer
Account Action - Date
Field - Date
Picker - Disclosure
- Divider
- Drop
Zone - Form
- Grid
- Grid
Item - Heading
- Heading
Group - Icon
- Image
- Image
Group - Inline
Layout - Inline
Spacer - Inline
Stack - Link
- List
- List
Item - Map
- Map
Marker - Map
Popover - Menu
- Modal
- Page
- Payment
Icon - Phone
Field - Popover
- Pressable
- Product
Thumbnail - Progress
- QRCode
- Resource
Item - Scroll
View - Select
- Sheet
- Skeleton
Image - Skeleton
Text - Skeleton
Text Block - Spinner
- Stepper
- Switch
- Tag
- Text
- Text
Block - Text
Field - Toggle
Button - Toggle
Button Group - Tooltip
- View
Supported components
- Avatar
- Badge
- Banner
- Block
Layout - Block
Spacer - Block
Stack - Button
- Card
- Checkbox
- Choice
- Choice
List - Clipboard
Item - Customer
Account Action - Date
Field - Date
Picker - Disclosure
- Divider
- Drop
Zone - Form
- Grid
- Grid
Item - Heading
- Heading
Group - Icon
- Image
- Image
Group - Inline
Layout - Inline
Spacer - Inline
Stack - Link
- List
- List
Item - Map
- Map
Marker - Map
Popover - Menu
- Modal
- Page
- Payment
Icon - Phone
Field - Popover
- Pressable
- Product
Thumbnail - Progress
- QRCode
- Resource
Item - Scroll
View - Select
- Sheet
- Skeleton
Image - Skeleton
Text - Skeleton
Text Block - Spinner
- Stepper
- Switch
- Tag
- Text
- Text
Block - Text
Field - Toggle
Button - Toggle
Button Group - Tooltip
- View
Anchor to Best practicesBest practices
- Keep content lightweight: Since the footer renders on every customer account page, avoid heavy data fetching or complex rendering that could cause layout shifts. Use static content or reserve space with placeholder components while loading.
- Use the consent APIs for privacy banners: Use
applyTrackingConsentChangeanduseCustomerPrivacy()(React) orcustomerPrivacy(TS) rather than building custom consent tracking. These APIs integrate directly with Shopify's consent management system. - Respect the shouldShowBanner flag: When building consent banners, check
shouldShowBannerfrom the Customer Privacy API to determine whether a banner should be shown. This flag accounts for whether consent has already been collected. - Provide accessible overlays: When using Sheet or Modal components for consent forms, include
accessibilityLabelattributes and ensure the form can be navigated with keyboard controls.
Anchor to LimitationsLimitations
- Single target per module: Each
[[extensions.targeting]]entry in your TOML configuration maps one target to one module file. - Static target: This is a static extension target, meaning it renders on every customer account page. It can't be conditionally shown or hidden per page.
collect_buyer_consentcapability required: UsingapplyTrackingConsentChangefrom the Customer Privacy API requires thecollect_buyer_consentcapability in your TOML configuration. Without this capability, consent changes will fail.- No block collapse: Returning
nullfrom this target collapses the extension rather than removing it from the page. The extension slot still exists in the DOM.