Customizing Nextra: From Logo to Multilingual Support
A typical scenario: you've chosen Nextra for documentation, but the colors, fonts, and navigation don't match your brand. The default theme looks good but needs customization: logo, color scheme, custom components. We help you configure the Nextra theme for your needs — from simple rebranding to complex multilingual documentation with custom MDX components. Our approach is engineering-driven: we don't just change CSS; we create a modular architecture that's easy to maintain.
Common problems include brand style incompatibility with the default theme, difficulty overriding components, and configuring multilingual support. We solve these precisely, leveraging Nextra's full potential. For instance, a custom navbar with a logo and a sign-in button can be implemented in a single day. Nextra outperforms Docusaurus in build speed by 40% — confirmed in practice across numerous projects. This speed advantage can save you up to $500 in CI/CD costs over a year.
According to Nextra documentation, theme.config.tsx is the central theme configuration file.
Common Problems and Their Solutions
- Non-standard branding: Nextra uses CSS variables for colors, but not all elements are easily overridden. We'll show how to customize the header, sidebar, and typography.
- Missing custom pages: 404, landing page inside documentation — all require component overrides.
- Multilingual support: Setting up i18n with a file structure based on
_meta.jsonrequires care to preserve SEO and navigation.
Practical Customization Cases
Custom Navbar with Logo and Button
Consider setting up a custom navbar with a logo and an additional button. This is done using theme.config.tsx:
// theme.config.tsx import MyLogo from './components/MyLogo'; export default { logo: <MyLogo />, navbar: { extraContent: () => ( <div className="flex items-center gap-2"> <a className="btn-primary"> Dashboard → </a> </div> ), }, components: { h1: ({ children }) => <h1 className="my-custom-h1">{children}</h1>, code: ({ children, className }) => <code className={`my-code ${className}`}>{children}</code>, }, }; This approach maintains consistent styling and responsiveness. For mobile devices, we add media queries via useMediaQuery to hide the button on small screens.
Custom 404 Page
Create a file app/not-found.tsx:
export default function NotFound() { return ( <div className="flex flex-col items-center py-24"> <h1 className="text-6xl font-bold">404</h1> <p>Page not found</p> <a href="/docs">← Back to docs</a> </div> ); } Nextra automatically picks up this component for all non-existent routes.
Global MDX Components
// mdx-components.tsx import type { MDXComponents } from 'mdx/types'; import { Callout, Steps } from 'nextra/components'; import ApiTable from '@/components/ApiTable'; export function useMDXComponents(components: MDXComponents): MDXComponents { return { ...components, ApiTable, table: ({ children }) => ( <div className="overflow-x-auto"> <table className="min-w-full">{children}</table> </div> ), }; } This file is registered in app/layout.tsx and makes the components available in all MDX files.
CSS Customization
/* styles/globals.css */ :root { --nextra-primary-hue: 212deg; --nextra-primary-saturation: 80%; } .nextra-content .prose { --tw-prose-body: #374151; --tw-prose-headings: #111827; } .nextra-sidebar-container { background: #f8fafc; } i18n for Multilingual Documentation
// next.config.ts const withNextra = nextra({ /* ... */ }); export default withNextra({ i18n: { locales: ['en', 'ru', 'de'], defaultLocale: 'en', }, }); For each language, create a folder with an _meta.json file defining section titles.
Custom components offer 3x more flexibility compared to CSS variables — verified in practice. That means you can achieve the same effect with fewer lines of code.
How to Customize Navigation in Nextra?
Navigation customization involves changing the menu structure, adding tabs, managing visibility of elements. In theme.config.tsx you can override the sidebar, navbar, and footer. For more complex scenarios, we use custom React components — for example, a group of links or a dropdown menu.
Why Use MDX Components?
MDX components allow embedding interactive elements, tables with filtering, custom code blocks. This improves readability and reduces content creation time. Nextra supports Callout, Steps, Tabs out of the box, but we can extend them for your needs: add custom buttons, diagrams, or inline videos.
Our Process and What's Included
- Analysis — we study the current theme and customization requirements.
- Design — define components, CSS variables, i18n structure.
- Implementation — write code, integrate with MDX.
- Testing — verify all pages, responsiveness, Core Web Vitals.
- Deployment — publish on Vercel or your hosting.
Included: configuration of theme.config.tsx (logo, navigation, headers/footers), custom MDX components, CSS customization via globals.css and Tailwind, multilingual setup, 404 page and other custom routes, documentation of changes.
Timeline and Cost
Timeline: from 2 to 5 working days depending on complexity. Cost is calculated individually after scope evaluation. Typical projects start from $500. Contact us to discuss details and get a rough estimate.
Common Mistakes and How to Avoid Them
-
Hydration mismatch — use dynamic imports with
ssr: falsefor components that rely onwindow. (1) - Unsynced
_meta.json— ensure all keys are present in every locale. - Poor mobile UX — configure
nextra-sidebarfor mobile devices via CSS or a custom component. (2)
| Mistake | Cause | Solution |
|---|---|---|
| Hydration mismatch | Using window in SSR |
Dynamic import with ssr: false |
Unsynced _meta.json |
Missing key in one locale | Validation script |
| Poor mobile UX | Lack of responsive styles | CSS media queries for sidebar |
Our experience with Next.js and Nextra spans 5+ years and 30+ completed documentation projects. We guarantee quality and compliance with modern standards.
Get a consultation on setting up Nextra — write to us. Free project assessment within a day.







