
A few months back I was helping a friend audit a Next.js blog that had been running for about a year. Decent content, a consistent publishing schedule, and reasonable domain age; on paper it should have been performing better in search than it was. When we dug into the technical side, the issue was pretty obvious: metadata was all over the place. Some posts had good title tags; others had the site name repeated twice because someone had hardcoded the template wrong. Descriptions were missing on maybe forty percent of the pages. Schema markup existed on the homepage and nowhere else. It was not that the team did not care about SEO; they just had no system for it, so it got done inconsistently or not at all. That experience is part of why I find the approach shown in the DKTK-Tech GitHub project so worth talking about; it solves exactly this class of problem by making consistent SEO output a structural property of the codebase rather than a task someone has to remember to do.
Automated SEO in a Next.js context does not mean handing your keyword strategy to a robot. It means writing the mapping between your content data and your SEO outputs once, correctly, and then having the system apply that mapping reliably every time a page builds. The metadata is no longer dependent on whoever published the post remembering to fill in the right fields in the right CMS panel. It comes from the content itself, processed through rules you have defined at the application level.
Starting With the Right Mental Model
Most SEO problems on developer-built sites come from thinking about SEO as content work rather than systems work. Variable is the nature of content work. It is because of who the author is, the amount of time he/she has and even if he/she remembers the style guide. Systems work is always consistent; either the system works or it does not, and when it doesn’t, one makes the adjustment once, which will improve every single page thereafter.
When you wire up Seozilla in a Next.js project, you are moving your SEO from the content work category into the systems work category. Title formatting is set in one template in a configuration file, which automatically sets the title for all pages. The canonical URL format is also set in one configuration, which provides the correct canonical URL tags for each page. The fallback OG image is set in one place, ensuring that it appears on any page without an image. None of this requires anyone to make a decision at publish time because the decisions were already made at configuration time.
This shift in mental model matters for how you think about maintenance too. When SEO systems work, improving it means improving the system: updating the title template, refining the schema configuration, and adding a new page type to the sitemap logic. One change propagates everywhere. When SEO is content work, improving it means auditing every page individually and fixing problems one by one. The first approach scales; the second does not.
What the Seozilla Configuration Actually Controls
People sometimes assume that a tool like Seozilla is doing something mysterious or magical. It is not. The configuration is explicit and readable; you can see exactly what rules are being applied and why. What it saves you is the work of writing and maintaining that logic yourself across every page type in your application.
Base URL Configuration: It is the building block. All absolute URLs, canonical links, Open Graph URLs, and sitemaps use the base URL configuration as the starting point. If it is misconfigured, the consequences can be hard to spot. For instance, the canonical link can reference the incorrect domain, or there can be discrepancies between the URLs referenced in the sitemap and the indexed URLs on Google.
The title template controls how your page-level titles combine with your site name. A common pattern is something like “Post Title | Site Name” with a separator character in between. Seozilla lets you define this template once: the separator, the order, and the character limit handling for titles that run long. Every page on your site follows the same pattern automatically, which matters for brand consistency in search results and also for avoiding the kind of duplicate title tag issues that come from inconsistent manual implementation.
Default Open Graph settings handle the cases where post-specific data is missing or incomplete. Not every post will have a custom social image; the default ensures that sharing any page on the site produces a reasonable preview rather than a broken one. This is the kind of detail that gets overlooked in manual SEO workflows because it only shows up when something is missing, and missing things are easy not to notice.
The Dynamic Route Pattern Explained
For a blog, the most important part of the implementation is how the dynamic post route handles metadata generation. In the Next.js App Router, a dynamic route like this can export both a default component and a function. Both receive the slug parameter; both can use it to fetch the post data they need.
The pattern that the GitHub Next.js repo demonstrates is clean and worth copying directly. The function fetches the post by slug, passes the post data and the current URL into a Seozilla helper function, and returns the resulting metadata object. That object contains everything Next.js needs to populate the full head section of the page: the title, the description, the canonical URL, the Open Graph tags, the Twitter Card tags, and the JSON-LD schema block.
One thing I appreciated about this implementation is how it handles the case where a post cannot be found. Rather than throwing an error or returning incomplete metadata, the function falls back gracefully to site-level defaults. This kind of defensive coding matters for SEO because broken metadata, whether from a 404 page or a misconfigured route, can cause real indexing issues if Google encounters it repeatedly.
Schema Markup and Why It Keeps Getting Ignored
Every time I look at a content site that has been running for a while without schema markup, I think about all the rich result placements that site has been invisible for. Article schema, breadcrumb schema, and FAQ schema all help Google understand your content better than plain HTML can. They also give you access to search result features that competitors without schema can’t use.
The reason schema keeps getting skipped is that JSON-LD feels intimidating if you have not worked with it before, and the consequences of getting it wrong are invisible; you do not get a visible error, you just get nothing. So developers who are not sure they will get it right often decide not to try rather than risk doing it badly. This is completely understandable and also completely unnecessary when you are using a tool that generates the schema from your content data according to a validated template.
With Seozilla handling schema generation, you define once that blog posts should produce article schema with these specific fields. And after that, each article will have a properly formatted and validated JSON-LD schema in its head. The author tag will be taken from your author information, the datePublished tag from your post metadata, and the headline tag from your post title. And the result is precise since it is taken straight from your content, and it is also correct since it is created based on the Google template specifications.
Connecting Everything to the Sitemap
It may surprise many people just how much a sitemap that correctly represents your existing content matters. Google crawls content based on information from sitemaps; a sitemap with content that does not currently exist is a waste of crawl budget, while a sitemap without content that you wish to have crawled will be crawled at a later date.
Next.js’ implementation of this is beautiful since the sitemap is created automatically using the same source used by the pages. Once you add a new post, it automatically shows up on the sitemap in the next build without you having to do anything. If you remove a post, then that post will automatically disappear from the sitemap. Your sitemap is always going to reflect what is on the website.
Adding this to Seozilla’s URL creation rules will help ensure that the URLs in the sitemap are the same as the canonical URLs on the page. Why is this important? Well, if the sitemap URL differs from the canonical URL, Google will eventually notice – but it might take some time.
Measuring Whether It Is Working
Once you have enabled SEO automation in your Next.js application, there are only a few areas where you can verify if everything is going smoothly. First, you can use Google’s Search Console to see whether the indexing and metadata of your website is correct. To ensure that your schema markup works, you can run Google’s Rich Results Test.
In my experience, the most satisfying part of this kind of implementation is opening Search Console a few weeks after launch and seeing a coverage report with no errors rather than the long list of warnings and issues that manually managed SEO tends to produce over time. Not because the automated approach is perfect, but because it is consistent; the same correct logic applies to every page, so problems do not accumulate the way they do when humans are making individual decisions for each piece of content.
Getting SEO right across a large Next.js site is genuinely hard when you are doing it manually. It requires discipline, good documentation, and a team that follows conventions under pressure. Getting it right with an automated pipeline requires good configuration upfront and then mostly just publishing good content. For most teams, the second approach is both more reliable and more sustainable over time.


