Skip to content
New: Customize your theme with an AI assistant. Read the guide

Files: src/config/config.toml, src/content/sections/<language>/footer.md, src/config/menu.<language>.json, src/config/social.json, src/i18n/<language>.json · Skill level: Beginner

The footer closes every page with a heading, your contact details, your links, the copyright, the language links, a row of Ask AI links, and the theme credit. Margo has three footer layouts. All three read the same copy file, footer.md, so you write the footer once.

Above the footer, most inner pages also show a call to action (the section call-to-action.md). It is a section, not part of the footer: see Sections and Contact & Booking.

src/config/config.toml
[settings.layout]
# wordmark | dark band: two-line heading with a cycling word, 3 contact columns, menu row, large site name
# columns | light: heading line, ruled link columns, newsletter form, copyright row
# email | light: the email address set large with a copy button, social links, small menu + copyright
footer = "email"
LayoutWhat it showsDemo page
wordmarkA dark band that stays dark in both modes. A large two-line heading whose last word changes every few seconds, three contact columns (email with a copy button, phone, social links), a row with every footer link, the copyright and language links, and your site name set across the full width at the bottomnone (set it to see it)
columnsA light footer. The heading line on the left and a newsletter form on the right, then four ruled link columns, then the copyright, the legal links, and the language links/home-studio/
emailA light footer. A short line and a Copy email button, your email address set as large as the page allows, the social links, then a small menu, the language links, the copyright, and the legal links. Margo ships with this layout/, inner pages, /home-photo/

One page, another layout. Add footerLayout to the page’s frontmatter. It wins over the config:

---
title: "Studio"
footerLayout: "columns" # wordmark | columns | email
---

src/content/homepage/english/home-studio.md uses columns this way, and home-photo.md sets email.

Every layout reads src/content/sections/english/footer.md (and the file with the same name in each other language folder):

src/content/sections/english/footer.md
webgl: "none" # `wordmark`: animated background: flow | dots | none
title: "Have something worth *{cycle}*\nTell me about it."
cycle: ["designing", "printing", "framing"]
columns:
- label: "Say hello"
url: "mailto:[email protected]"
copy: true
- label: "By phone"
value: "+1 (555) 010-0199"
url: "tel:+15550100199"
- label: "Elsewhere"
socials: true
wordmark: ""
bottomMenu: [3]
linkColumns: # trimmed
- label: "Studio"
menu: 2
- label: "Social"
socials: true
- label: "Offices"
lines: ["Rotterdam, NL", "Montréal, CA"]
newsletter:
enable: true
title: "**Notes from the studio.** New work and what we learned, four times a year."
note: "One click to unsubscribe. Read the [privacy policy](/privacy-policy/)."
emailLabel: "**A project in mind?** Write to me, I answer within a day."
smallMenu: [2]
KeyUsed byWhat it does
titlewordmark, columnsThe heading. \n splits it into two lines. *{cycle}* is the slot for the changing word: keep it as the last word of the first line
cyclewordmark, columnsThe words shown in turn in the slot, every 2.4 seconds. One word stays still; [] removes the slot
columnswordmarkThe contact columns (the first three). Each has a label and either value and url (a mailto:, tel:, or page link; an empty url is plain text), copy: true for a Copy email button, or socials: true for the links of social.json
emailemailThe address set large. Empty uses the first mailto: column
wordmarkwordmarkThe large name at the bottom. Empty uses logoText, then title, from config.toml
webglwordmarkAn animated background: flow, dots, or none
bottomMenucolumns, emailThe footer link groups shown next to the copyright, by position
linkColumnscolumnsUp to four ruled columns. Each has a label and one of menu: <position> (a footer link group), socials: true, or lines: [...] (text lines, Markdown links allowed)
newslettercolumnsThe signup next to the heading. enable: false hides it here only
emailLabelemailThe line above the large address
smallMenuemailThe footer link groups of the small menu row, by position

The sample email, phone number, and offices are placeholders: replace them in every language folder. The Copy email and Copied labels are footer.copyEmail and footer.copied in the language files.

The links come from the footer list in src/config/menu.<language>.json, and the layouts pick its groups by position (bottomMenu, linkColumns, smallMenu). The wordmark footer shows every link once in one row. See Menus.

[settings.copyright]
enable = true
text = "" # `{year}` and `{brand}` are replaced with the build year and `site.title`

Leave text empty to use footer.copyright from the language files (”© {year} {brand}. All rights reserved.” in English). {year} becomes the year of the build, so the notice stays current, and {brand} becomes [site] title. A text here is used in every language.

Ask AI Row

Every footer layout ends with a row of links that ask an AI assistant about the current page, and links to the page’s Markdown copy, llms.txt, and llms-full.txt. It ships on:

[settings.pageActions]
enable = true
footer = true # false removes this row
providers = ["chatgpt", "claude", "perplexity", "grok"] # empty hides the "Ask" links

Its labels are ai.footerAsk, ai.footerRead, and ai.footerMarkdown in the language files. See AI Links & llms Files.

Theme Credit

Every footer layout shows the theme credit under the copyright, and it is also the last line of llms.txt. It is editable in config.toml. The part of text in [brackets] becomes the link to url:

[settings.themeCredit]
enable = true
text = "Built on the Margo Astro theme by [Getastrothemes]"
url = "https://getastrothemes.com/astro-themes/margo/"

Newsletter

The columns footer shows a Mailchimp signup form next to its heading. It posts to [settings.subscription] formAction in config.toml, which ships as a placeholder: until you set it, npm run dev shows a warning inside the form. [settings.subscription] enable = false hides every signup form, and newsletter.enable: false in footer.md hides only this one. See Forms.

The social links in the footers (and in the mobile menu) come from src/config/social.json:

{
"main": [
{
"enable": true,
"label": "instagram",
"icon": "/images/icons/instagram.svg",
"url": "https://www.instagram.com"
}
]
}

The shipped list has Facebook, Twitter, Instagram, and LinkedIn, and the links point to the networks’ home pages. Replace each url with your own profile, and set enable to false on networks you don’t use. label is the network name; icon is an SVG in src/assets/images/icons/.

Files For Developers

src/layouts/components/global/Footer.astro picks the layout (from the page’s footerLayout, else [settings.layout] footer, else wordmark) and builds the copyright line. The layouts are in src/layouts/components/global/footer/: FooterWordmark.astro, FooterColumns.astro, and FooterEmail.astro, with FooterAi.astro (the Ask AI row), FooterCredit.astro (the theme credit), FooterLanguages.astro (the language links), and footerContent.ts (reads footer.md).

Do It With AI

Set the footer to the [wordmark | columns | email] layout in [settings.layout] of
src/config/config.toml. In footer.md in every language folder of src/content/sections/, put my
email [EMAIL] and phone [PHONE] in columns and email, rewrite title and cycle for my work
([ONE LINE ABOUT ME]), and translate them. Put my social profiles in src/config/social.json:
[URLS], and set enable: false on the networks I didn't list.
Type something to search...