The footer used to be the last thing anyone configured. A row of links, a copyright line, done. On a site with six pages that is the right amount of footer — and on a site with sixty it is a wasted screen.
Astro Rocket ships five footer layouts, and as of this release the multi-column one is the default. This post covers what each is for, how the default fills itself, and how to get any of the others back.
The five layouts
All five come from one component, src/components/layout/Footer.astro, chosen with the layout prop:
columns— a brand column with the newsletter signup, then link groups, then a bottom bar with the copyright, the feed and your social accounts. The default.centered— one centred axis: identity, then navigation, then a legal line. What the theme used to ship.simple— a single row: logo on the left, links and social icons on the right.stacked— logo, tagline, navigation and copyright stacked and centred. Good under a landing page.minimal— the copyright line and nothing else.
Every one of them is rendered on the components page, so you can see them side by side before choosing.
The default fills itself
The columns layout existed before this release and almost nobody used it, for a reason worth admitting: linkGroups defaulted to an empty array. Switch to it and you got a logo and a lot of empty space. A default that nobody configures has to fill itself, so now it does.
With nothing set, it derives three columns from the site it is on:
| column | comes from |
|---|---|
| Site | footerNavItems in src/config/nav.config.ts |
| Topics | your six most-used blog tags, linking to their tag pages |
| Projects | your visible projects |
Each column is dropped when it has nothing in it. A brand-new site with no posts and no projects gets the Site column alone, which looks much like the old single-row footer. Add posts and the Topics column appears. Add projects and so does that one. The grid counts what is actually there, so a site with two columns does not leave a third of the row empty.
That is the part that matters if you are wondering whether this change is going to make your small site look padded. It will not. The footer reports what exists rather than what someone remembered to type.
Projects that have no page
If you mark a project placeholder: true, it has no detail page — ProjectCard already renders those without a link on the projects index. The footer does the same: the name is listed, in plain text, with no link. Projects that do have pages sort first, so the column leads with the entries you can actually follow.
This demo uses it deliberately. It is a demo, and on demos not everything is linked.
Adding a column the theme cannot work out
Some columns cannot be derived — a support column, a second product, an offices list. Those go in footerLinkGroups, also in nav.config.ts:
export const footerLinkGroups: FooterLinkGroupConfig[] = [
{
titleKey: 'footer.groups.questions',
title: 'Got questions?',
links: [
{ label: 'FAQ', href: '/about#faq' },
{ label: 'Email', href: 'mailto:hello@example.com' },
{ label: 'GitHub', href: 'https://github.com/you/repo', external: true },
],
},
];
These are added to the derived columns rather than replacing them. titleKey is looked up in your locale files so the heading translates; title is the fallback when there is no key. Internal hrefs go through the same resolver the nav uses, so they get the locale prefix on a translated site.
To replace the derived set entirely, pass linkGroups to <Footer> directly.
The bottom bar
Below a divider: the copyright on one side, the feed and your social accounts on the other.
The social icons come from socialLinks in src/config/site.config.ts — the same list the rest of the theme reads. That is new, and it fixes something embarrassing: the footer took its socials from a prop that no layout ever passed, so the markup was there and unreachable in all five layouts. If you have social links configured, they now appear.
The RSS icon leads that row. It is the one subscription that needs no account, and it belongs with the other ways to follow rather than buried in a blog section. On a translated site it points at that locale’s feed.
The credit line — Theme by Hans Martens Dev — is footer.credit in your locale files. Reword it or delete the key.
Going back to what you had
One prop. In whichever layout wraps your pages:
<Footer slot="footer" layout="centered" background="default" />
src/layouts/ holds five of them: BlogLayout, PageLayout, ProjectLayout, LandingLayout and MarketingLayout. Change the ones you want.
If you are updating an existing site rather than starting a new one, this is the line you want, because the switch to columns changes every page.
Where the menu itself is configured
Which links appear in the footer, as opposed to how they are arranged, is a separate question with its own answer: A Footer Menu Separate From the Header. The footer menu is configured independently of the header, so you can put Privacy and Imprint down there without cluttering your main nav.
The two work together. That post decides what is in the Site column; this one decides what the column sits in.