---
title: "Top SEO tips — seo-mcp"
description: "The SEO tips readers marked as worked most often."
url: "https://seo-mcp.io/top-this-week"
---

# Top this week

Ranked by readers who said “it worked” and by verification checks recorded through the MCP server.

- [Programmatic SEO for Niche Job Boards: Templated Pages at Scale](https://seo-mcp.io/t/programmatic-seo-for-niche-job-boards-templated-pages-at) — Generate templated listing pages from structured job data so every role-and-location combination has a crawlable URL, then invest in the technical SEO underneath it. Unique titles built from template fields, internal links from hub pages, fast list and detail templates and clean indexation are what turn the template set into rankings. The tactic transfers to any niche with repeating structured records; without that technical layer the generated pages stay thin.
- [Add canonical URLs with the Next.js Metadata API](https://seo-mcp.io/t/add-canonical-urls-with-the-next-js-metadata-api) — Next.js App Router resolves metadata per route, so each page can declare its own canonical URL instead of inheriting one global value. Set alternates.canonical in the page metadata export or generateMetadata, keep it absolute and self-referencing, and make sure template redirects and trailing-slash handling agree with the URL you declare.
- [Ship app/sitemap.ts and app/robots.ts](https://seo-mcp.io/t/ship-app-sitemap-ts-and-app-robots-ts) — Next.js App Router turns app/sitemap.ts and app/robots.ts into /sitemap.xml and /robots.txt at build time. Return only canonical, indexable URLs from sitemap.ts with honest lastModified values, and set the rules plus the sitemap location from robots.ts. Both files must be reachable without authentication and must not be shadowed by static files in public/.
- [Verify indexing with URL Inspection](https://seo-mcp.io/t/verify-indexing-with-url-inspection) — URL Inspection shows the indexed version Google holds for one URL: crawl time, selected canonical, status code and blocked resources. Run it before rewriting content or changing redirects. It separates indexing failures from ranking problems and confirms whether Google sees the same page your browser renders.
- [Write a crawlable robots.txt](https://seo-mcp.io/t/write-a-crawlable-robots-txt) — robots.txt controls crawling, not indexing. Serve one file per host at the root with a 200 status and a sitemap reference, allow CSS and JavaScript so rendering matches users, and block only infinite or private URL spaces. A single Disallow: / line can remove the entire site from search.
- [Add LocalBusiness structured data](https://seo-mcp.io/t/add-localbusiness-structured-data) — LocalBusiness markup describes a physical or service-area business: name, address, telephone, hours and coordinates. Use a specific subtype, keep the address identical to the Google Business Profile, and use areaServed for service-area businesses. One page and one block per location.
- [Set up a Google Business Profile](https://seo-mcp.io/t/set-up-a-google-business-profile) — Google Business Profile is the primary source for local pack and Maps data. Claim and verify the listing, choose the most specific primary category, and keep name, address, hours, phone and website accurate. Add real photos, answer questions and respond to reviews without incentives.
- [Add BlogPosting JSON-LD in a server component](https://seo-mcp.io/t/add-blogposting-json-ld-in-a-server-component) — Article markup helps Google understand headline, author, publish date and image, and feeds both rich results and AI answers. In a Next.js App Router project, render a JSON-LD script inside the blog page server component from the same fields the page displays. Keep the markup valid and identical to the visible content.
- [Write unique titles and descriptions in Next.js](https://seo-mcp.io/t/write-unique-titles-and-descriptions-in-next-js) — Next.js resolves metadata from the page up to the layout, so a title set once in the root layout repeats on every route. Export a title and description per page, or generate them from record data in generateMetadata. Use title.template for the site suffix, keep descriptions unique, and verify the rendered HTML rather than the component source.
- [Serve responsive images with next/image](https://seo-mcp.io/t/serve-responsive-images-with-next-image) — next/image emits responsive srcset values, picks modern formats and prevents layout shift when width and height are known. Replace raw img tags on content pages, pass sizes for each layout width, mark the LCP image priority, and keep alt text meaningful. Check the rendered HTML for srcset and intrinsic dimensions rather than trusting the component defaults.
- [Create one page per service and service area](https://seo-mcp.io/t/create-one-page-per-service-and-service-area) — Local search rewards pages that match the service and the place in the query. Create a page for each service you actually deliver, then add city or neighbourhood variants only where you have real proof such as jobs, photos or staff. Give each page a unique H1, description, price or booking action and internal links to related services, and avoid cloning the same text across locations.
- [Make contact details clickable and consistent](https://seo-mcp.io/t/make-contact-details-clickable-and-consistent) — Customers and crawlers both use the contact page to decide whether a business is real and reachable. Put the phone number in a tel: link, show the full address and staffed hours, and keep the same name, address and phone in the footer, contact page and LocalBusiness markup. Test the phone link on mobile and check that the map pin resolves to the real entrance.
- [Add FAQ answers to service pages](https://seo-mcp.io/t/add-faq-answers-to-service-pages) — Service pages that answer real pre-purchase questions match longer queries and give AI assistants quotable text. Collect the questions from sales calls, chat logs and People also ask, answer each in two or three plain sentences, and keep the answers visible on the page. Mark them up with FAQPage only when the same text is visible, and link each answer to the service or booking action.
- [Add local photos with descriptive alt text](https://seo-mcp.io/t/add-local-photos-with-descriptive-alt-text) — Search engines and customers both use photos to confirm that a local business actually works in the area. Add photos of completed jobs, the team and the premises to the matching service or area page, compress them, and write alt text that names the service and place without keyword stuffing. Keep the newest photos on the page and remove stock images that could belong to any business.
- [Canonicalize duplicate URLs](https://seo-mcp.io/t/canonicalize-duplicate-urls) — Duplicate URLs split signals across protocol, host, slash and parameter variants. Pick one canonical form, emit one absolute self-referencing canonical per page, and align internal links, sitemap entries, hreflang and og:url with it. Use redirects when the duplicate should not exist at all.
- [Add Product schema with offers](https://seo-mcp.io/t/add-product-schema-with-offers) — Product markup with an offers object enables price and availability in merchant listings. Include name, image, description, sku or gtin, brand and offers with price, priceCurrency, availability and url. Keep values identical to the visible page and give each variant its own offers.
- [Match content to search intent](https://seo-mcp.io/t/match-content-to-search-intent) — Search intent decides the page format. Informational queries need a direct answer and clear sections, commercial queries need comparisons and pricing, transactional queries need product details above the fold. Classify top queries from the SERP, then restructure rather than rewriting when the topic is right.
- [Submit your product feed to Google Merchant Center](https://seo-mcp.io/t/submit-your-product-feed-to-google-merchant-center) — Merchant Center is the feed layer behind free product listings, Shopping ads and many AI shopping answers. Create an account, verify the domain, submit a feed with stable ids, GTINs and accurate price and availability, then fix disapprovals in the Diagnostics tab. Keep the site and feed in sync, because mismatched prices and stock are the most common suspension cause.
- [Make JavaScript content crawlable](https://seo-mcp.io/t/make-javascript-content-crawlable) — Google renders JavaScript, but rendering costs time and AI retrieval systems often read raw HTML. Server-render primary content, keep titles and links in the initial response, and avoid gating content behind interactions. Verify by curling the URL and by loading it with JavaScript disabled.
- [Improve LCP to under 2.5 seconds](https://seo-mcp.io/t/improve-lcp-to-under-2-5-seconds) — Largest Contentful Paint is the time until the biggest visible element renders. Google's good threshold is 2.5 seconds at the 75th percentile of field data. Measure with CrUX or PageSpeed Insights, identify the element, then fix server response, resource load delay, load duration and render delay.
