The technical SEO checklist for developers
Technical SEO is mostly engineering work: correct status codes, canonical URLs, crawlable HTML and fast pages. None of it requires a keyword tool.
The Next.js Metadata API generates head tags from exported objects or a generateMetadata function in each route segment. Define shared defaults in the root layout with metadataBase and a title template, then override per route — canonical URLs, Open Graph, Twitter cards and robots directives all flow from the same typed object.
Each route segment can export a static metadata object or an async generateMetadata function; Next.js merges them from the root layout down to the page and renders the resulting head tags.
Merging is shallow per field. A child that defines openGraph replaces the parent's openGraph entirely rather than merging its keys, which is the source of most 'my OG image disappeared' reports. Compose deliberately with a helper instead of relying on inheritance for nested objects.
// app/layout.tsx
export const metadata: Metadata = {
metadataBase: new URL("https://rovqix.in"),
title: { default: "ROVQIX — Building Digital Products", template: "%s — ROVQIX" },
alternates: { canonical: "/" },
robots: { index: true, follow: true },
};Every indexable page needs a self-referencing canonical pointing at the exact URL you want ranked — one protocol, one host, no trailing-slash ambiguity, no tracking parameters. With metadataBase set, alternates.canonical accepts a path and Next.js resolves it to an absolute URL.
Place an opengraph-image.tsx file in a route segment and export a component built with ImageResponse. Next.js renders it to a PNG at build or request time and injects the correct og:image tags with dimensions — no design handoff, no stale assets, and every new page gets a branded card for free.
// app/blog/[slug]/opengraph-image.tsx
import { ImageResponse } from "next/og";
export const size = { width: 1200, height: 630 };
export const contentType = "image/png";
export default async function Image({ params }) {
const { slug } = await params;
const post = await getPost(slug);
return new ImageResponse(<Card title={post.title} />, size);
}Both are file conventions. app/sitemap.ts exports a function returning your URL entries, and app/robots.ts returns your crawl rules and sitemap location. Because they are code, they can read the same content source your pages read — which means a new article appears in the sitemap the moment it exists, with no manual step.
// app/sitemap.ts
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const posts = await getAllPosts();
return [
{ url: "https://rovqix.in", lastModified: new Date(), priority: 1 },
...posts.map((post) => ({
url: `https://rovqix.in/blog/${post.slug}`,
lastModified: new Date(post.updatedAt),
})),
];
}Centralise it. We build one typed helper that takes a content object and returns a complete Metadata result — title, description, keywords, canonical, robots, Open Graph and Twitter. Pages call the helper; nobody hand-writes tags. When we add a field, every page gets it in one commit.
It runs during rendering and its data requests are deduplicated with the page's own fetches, so requesting the same resource in both places costs one request. Streaming still works — metadata is resolved before the response head is flushed.
No. next/head is a Pages Router API. In the App Router use the Metadata API, or render raw tags in a layout only for cases the API does not cover.
It supplies the origin used to turn relative URLs in your metadata — canonicals, OG images — into absolute URLs. Without it, social crawlers receive relative paths they cannot resolve.
Render a script tag with type="application/ld+json" inside the page component. The Metadata API does not cover structured data, and a small reusable JsonLd component keeps it consistent.
ROVQIX Growth
SEO & growth team, ROVQIX
The ROVQIX growth team handles technical SEO, Core Web Vitals and AI-search visibility for the sites we build. Recommendations here are the ones we apply to client projects and to rovqix.in itself.
ROVQIXdesigns and builds production web platforms — Next.js front ends, Node.js APIs and the infrastructure behind them. Tell us what you're building and we'll scope it with you.
Technical SEO is mostly engineering work: correct status codes, canonical URLs, crawlable HTML and fast pages. None of it requires a keyword tool.
Structured data does not improve rankings directly. It changes how your result looks and how machines understand your page, which is worth more than it sounds.
A canonical tag is a suggestion, not an instruction. Getting it consistently right across a site is what makes the suggestion credible.
No spam. Just the occasional case study and craft breakdown.