Next.js favicon and metadata
Next.js reads icons from its metadata export. Make the files here, drop them in the public folder, and paste the generated code into your root layout so every route gets the right links. Nothing is uploaded: every file is made in your browser.
Live preview
Making your icons…
Source
Icon source
One to 3 characters, such as S or Ab.
rgb(255, 255, 255) · hsl(0, 0%, 100%)
Style
Background
rgb(0, 0, 0) · hsl(0, 0%, 0%)
Rounding applies to the browser and Android icons. The touch icon and the maskable icon are always full squares.
Device preview
Making your icons…
Your files
Your files appear here as soon as the icon is ready.
Site details and code
Shown when someone installs your site as an app. Up to 45 characters.
Used under the icon on a home screen. Up to 12 characters.
Where you will put the files on your site, such as / or /icons/.
Save this as site.webmanifest next to your icons.
{
"name": "My Next.js App",
"short_name": "My App",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
},
{
"src": "/maskable-icon-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"theme_color": "#000000",
"background_color": "#000000",
"display": "standalone"
}
Paste these lines inside the <head> of every page.
<link rel="icon" type="image/x-icon" sizes="48x48" href="/favicon.ico"> <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/apple-touch-icon.png"> <link rel="manifest" href="/site.webmanifest"> <meta name="theme-color" content="#000000">
Add this to your root layout (app/layout.tsx).
import type { Metadata, Viewport } from "next";
export const metadata: Metadata = {
icons: {
icon: [
{ url: "/favicon.ico", sizes: "48x48", type: "image/x-icon" },
{ url: "/favicon-16x16.png", sizes: "16x16", type: "image/png" },
{ url: "/favicon-32x32.png", sizes: "32x32", type: "image/png" },
],
apple: [
{ url: "/apple-touch-icon.png", sizes: "180x180", type: "image/png" },
],
},
manifest: "/site.webmanifest",
};
export const viewport: Viewport = {
themeColor: "#000000",
};
Add this to your theme's functions.php, with the icon files in the folder you typed above.
add_action( 'wp_head', 'add_site_favicon_links', 5 );
remove_action( 'wp_head', 'wp_site_icon', 99 );
function add_site_favicon_links() {
?>
<link rel="icon" type="image/x-icon" sizes="48x48" href="<?php echo esc_url( home_url( '/favicon.ico' ) ); ?>">
<link rel="icon" type="image/png" sizes="16x16" href="<?php echo esc_url( home_url( '/favicon-16x16.png' ) ); ?>">
<link rel="icon" type="image/png" sizes="32x32" href="<?php echo esc_url( home_url( '/favicon-32x32.png' ) ); ?>">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="<?php echo esc_url( home_url( '/apple-touch-icon.png' ) ); ?>">
<link rel="manifest" href="<?php echo esc_url( home_url( '/site.webmanifest' ) ); ?>">
<meta name="theme-color" content="#000000">
<?php
}
More favicon ideas
How it works
Choose where the icon comes from
Type one to three characters, pick an emoji, choose a simple shape, or drop in your own PNG, JPG, WebP or SVG. Nothing is uploaded; the picture stays in this tab.
Style it
Pick a flat colour or a soft gradient, round the corners, and set the padding. The browser tab icon, the phone home screen icon and the Android icon all update as you change a setting.
Check every file
Each file is listed with its size and what it is for, so you can see that the touch icon fills its whole square and the Android icon keeps your logo inside the safe circle.
Download and paste
Download the package as one ZIP, with a plain-language README and ready-made snippets, or take the files one by one. Upload the icons to the folder you typed under Site details, then paste the lines for your HTML, Next.js or WordPress head.
Questions about a Next.js favicon
How do I make a Next.js favicon?
The page opens with the letters "N"; change it, the colours, the rounding and the padding as you like, and every file updates at once. Then open Site details and code, choose Next.js and copy it. The code already uses the folder /. Keep the files in public at the root. Remove any old favicon.ico from the app folder, or Next.js may add its own icon link as well.
Do I need the metadata code if I add files to the app folder?
No. Next.js also picks up files named favicon.ico or icon.png inside the app folder by itself. The metadata route used here lists every size and the manifest explicitly.
Where do I put the files for a Next.js favicon?
The folder is set to the site root, so put the files straight inside the public folder of your project. They are then served from the top of your domain.
Is anything uploaded when I make a Next.js favicon?
No. The icons for your Next.js favicon are drawn by your own browser from the settings you pick, so nothing is sent to a server, and the page keeps working offline once it has loaded.
More free tools
View all toolsAbout these tools
Small tools, made by Sifency
Sifency is a small studio that builds themes, plugins and web apps. These tools began as the things we kept needing ourselves, so we tidied them up and left them open for everyone. There is nothing to sign up for.