---
title: "@seo-mcp — seo-mcp"
description: "SEO tips sourced from @seo-mcp."
url: "https://seo-mcp.io/author/seo-mcp"
---

# @seo-mcp

seo-mcp playbook — Curated, verifiable SEO playbook maintained by seo-mcp. Every entry cites official documentation.

97 sourced tips.

- [Write unique copy for category pages](https://seo-mcp.io/t/write-unique-copy-for-category-pages) — Category pages need more than products to rank for commercial queries. Add an intro that states what the category contains and who it is for, buying guidance and answers to common questions. Avoid the same boilerplate across categories, and keep the first paragraph visible.
- [Earn links from suppliers and brand partners](https://seo-mcp.io/t/earn-links-from-suppliers-and-brand-partners) — Suppliers and brands publish stockist, distributor and partner directories to help buyers find retailers. Ask each supplier for a listing on that page with your store name and URL, and offer a logo, one-line description and the categories you carry. Keep the store's own partners page current, because reciprocal pages make the request routine and give the link a real editorial home.
- [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.
- [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.
- [Serve responsive images with srcset](https://seo-mcp.io/t/serve-responsive-images-with-srcset) — srcset with width descriptors and a sizes attribute lets the browser choose an appropriate file per viewport and pixel density. Without sizes, phones download desktop-size images. Provide at least three widths, keep dimensions to reserve layout space, and check the chosen file in the Network panel.
- [Fix crawl traps in filters and calendars](https://seo-mcp.io/t/fix-crawl-traps-in-filters-and-calendars) — Crawl traps are infinite URL spaces: calendars, sort combinations, session IDs and pagination that never ends. They starve real pages of discovery. Find them in Crawl stats, fix the link graph first, return 404 for out-of-range parameters, and block only the truly infinite spaces.
- [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.
- [Generate social images with opengraph-image.tsx](https://seo-mcp.io/t/generate-social-images-with-opengraph-image-tsx) — The App Router reads opengraph-image files as social cards for each route. Export a small ImageResponse component that renders the title and brand, set size and contentType, and add route-level files where the default card is wrong. Confirm the rendered tags point at the generated image and that the image returns 200 with the expected dimensions.
- [Consolidate thin and duplicate pages](https://seo-mcp.io/t/consolidate-thin-and-duplicate-pages) — Thin pages targeting the same topic compete with each other. Group URLs by shared queries and near-duplicate titles, choose the strongest by impressions and links, merge unique material, and 301 the losers. Keep pages that serve genuinely different intent.
- [Keep key content in the raw HTML](https://seo-mcp.io/t/keep-key-content-in-the-raw-html) — Crawlers and AI retrieval systems may read raw HTML before executing JavaScript. Server-render the main copy, prices, answers and links, and keep metadata in the initial head. Verify with curl and with JavaScript disabled, and hydrate widgets on top of real markup.
- [Implement hreflang for every locale](https://seo-mcp.io/t/implement-hreflang-for-every-locale) — hreflang tells Google which language and region variant to serve. Every variant must list all variants plus itself, using valid language or language-region codes and absolute URLs. Choose one delivery method, keep each variant self-canonical, and validate reciprocity after every locale change.
- [Fix internal links to 404 pages](https://seo-mcp.io/t/fix-internal-links-to-404-pages) — Internal links to 404 pages waste crawl budget and strand visitors. Crawl the site, list every target that returns 404 or 410, and trace the linking pages. Then either update the link to a live URL or add a redirect when a real replacement exists. Re-crawl to confirm zero broken internal links.
- [Mark up product availability](https://seo-mcp.io/t/mark-up-product-availability) — Availability in Product markup must reflect real inventory. Use schema.org values such as InStock, OutOfStock, PreOrder, BackOrder and SoldOut, and keep the visible page identical. Generate markup from the commerce system, not from a static template, and revalidate after integrations change.
- [Allow AI crawlers in robots](https://seo-mcp.io/t/allow-ai-crawlers-in-robots) — AI assistants fetch pages with their own user agents: GPTBot and OAI-SearchBot from OpenAI, ClaudeBot from Anthropic, PerplexityBot, and Google-Extended for Gemini. Decide per bot between training and retrieval, write explicit groups, and test with curl using each agent string.
- [Create topic clusters around pillars](https://seo-mcp.io/t/create-topic-clusters-around-pillars) — A topic cluster is a pillar page plus supporting articles for narrower questions, linked to the pillar and to each other where relevant. Build the cluster from real questions and existing queries, keep each supporting page self-sufficient, and publish in an order that supports the pillar at launch.
- [Fix soft 404 pages properly](https://seo-mcp.io/t/fix-soft-404-pages-properly) — A soft 404 returns HTTP 200 while showing missing-content copy. Google keeps it indexed and wastes crawl budget on empty templates. Find these URLs in the Page indexing report, then make missing content return a real 404 or 410 and keep 200 only for pages with genuine value.
- [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.
- [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.
- [Write unique title tags](https://seo-mcp.io/t/write-unique-title-tags) — The title element is the main input for the search result link, and Google rewrites vague or duplicated titles. Write one unique title per page, aim for 50 to 60 characters, front-load the distinguishing phrase and keep the brand short at the end. Audit duplicates before adding keywords.
- [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 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/.
- [Reduce INP to under 200 milliseconds](https://seo-mcp.io/t/reduce-inp-to-under-200-milliseconds) — Interaction to Next Paint measures how quickly the page responds to input, reported at p75. A good value is under 200 ms. Find the slowest interactions in the Performance panel, then split long tasks, defer third-party scripts, reduce hydration cost and trim DOM size.
- [Fix keyword cannibalization](https://seo-mcp.io/t/fix-keyword-cannibalization) — Cannibalization happens when several URLs compete for one query, so Google alternates and neither accumulates authority. Find queries with multiple ranking pages, choose a winner by intent and performance, then merge, differentiate or redirect the others and update internal links.
- [Load fonts with next/font to avoid layout shift](https://seo-mcp.io/t/load-fonts-with-next-font-to-avoid-layout-shift) — next/font downloads and self-hosts Google or local fonts at build time, generates size-adjust fallbacks and removes the render-blocking stylesheet request. Import the font in the layout, pass its className to the html element, and reference the CSS variable in styles. Verify with a throttled trace that text does not shift and that no font request leaves your origin.
- [Keep NAP citations consistent](https://seo-mcp.io/t/keep-nap-citations-consistent) — Name, address and phone must match exactly wherever they appear: footer, contact page, Google Business Profile, directories and listings. Choose one format, apply it everywhere, record it in a shared document, and fix the highest-authority citations first.
- [Add prerendering and a sitemap endpoint](https://seo-mcp.io/t/add-prerendering-and-a-sitemap-endpoint) — SvelteKit renders pages on the server by default, so crawlers already receive HTML, but every request still needs a render. Enable prerendering for content routes with export const prerender = true and generate a sitemap from src/routes/sitemap.xml/+server.ts so the file exists at build time.
- [Publish an llms.txt file](https://seo-mcp.io/t/publish-an-llms-txt-file) — llms.txt is a proposed convention: a Markdown file at the site root that maps the most useful pages for AI systems. It is not a Google standard and adoption is unproven, so publish it as a low-cost experiment, keep it current, and measure referrals instead of assuming impact.
- [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.
- [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.
- [Fix mixed content on HTTPS pages](https://seo-mcp.io/t/fix-mixed-content-on-https-pages) — Mixed content is any http:// resource loaded by an https:// page. Browsers block active mixed content such as scripts and styles, and warn or auto-upgrade passive images. Find it in the console and in crawl output, then serve every subresource over HTTPS, including third-party embeds.
- [Remove deprecated schema](https://seo-mcp.io/t/remove-deprecated-schema) — Rich result support changes. FAQPage is limited to authoritative government and health sites, HowTo rich results were retired, and data-vocabulary is obsolete. Remove markup for features you no longer qualify for, keep useful visible content, and check enhancement reports for items that stopped being valid.
- [Add html lang attribute](https://seo-mcp.io/t/add-html-lang-attribute) — The lang attribute on the html element tells browsers and assistive technology which language the page uses. Set it per locale, keep it accurate when content mixes languages, and make it match your hreflang values. A missing or wrong value breaks pronunciation, translation prompts and locale signals.
- [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.
- [Lazy-load below-the-fold images](https://seo-mcp.io/t/lazy-load-below-the-fold-images) — Native loading=lazy defers offscreen images and iframes until they approach the viewport. Apply it only below the fold, keep width and height so space is reserved, and never lazy-load the LCP image. Verify in the Network panel that above-the-fold media loads immediately.
- [Handle faceted navigation with canonicals](https://seo-mcp.io/t/handle-faceted-navigation-with-canonicals) — Facets multiply URLs into thousands of near-duplicates. Decide which combinations deserve indexing, give those unique titles and copy with self-canonicals, and canonicalize the remainder to the closest indexable parent. Block infinite parameter spaces and monitor crawl stats for facet-heavy URLs.
- [Add a page for each local service](https://seo-mcp.io/t/add-a-page-for-each-local-service) — Create a page for each service in each location you genuinely serve. Each needs unique content: the service, local proof such as projects or reviews, pricing guidance, service area and a contact path. Do not spin the same paragraph with a city name swapped.
- [Use descriptive URL slugs](https://seo-mcp.io/t/use-descriptive-url-slugs) — Descriptive slugs help users and give crawlers a topical hint. Keep them short, lowercase, hyphenated and stable. When a slug must change, redirect the old path with a single 301 and update internal links. Avoid dates, session IDs and uppercase characters that create duplicate URLs.
- [Collect product reviews on Google or Trustpilot](https://seo-mcp.io/t/collect-product-reviews-on-google-or-trustpilot) — Product reviews add first-hand evidence that product pages rarely contain and that review systems reward. Ask every buyer after delivery through the order confirmation or a follow-up email, make the request one click, and never filter out unhappy customers. Answer negative reviews in public, keep review markup on the page, and track rating counts per product rather than one sitewide number.
- [Make pages citable by AI answers](https://seo-mcp.io/t/make-pages-citable-by-ai-answers) — AI answers quote passages, not pages. Put a direct answer in the first sentence of each section, then evidence, then caveats. Use question-shaped headings, name sources, include dates and units, and keep paragraphs self-contained so an extracted passage still makes sense.
- [Write clear entity names consistently](https://seo-mcp.io/t/write-clear-entity-names-consistently) — Search engines and AI systems resolve entities by name. Use one consistent form for the brand, products and people across titles, structured data, the about page and social profiles. Add sameAs links, use legalName when it differs, and avoid decorative renaming in copy.
- [Fix redirect chains and loops](https://seo-mcp.io/t/fix-redirect-chains-and-loops) — A redirect chain adds latency and leaks crawl signals. Point each legacy URL directly at the final destination, use 301 or 308 for permanent moves, and keep the map in source control. Audit with curl -IL and update internal links so chains stop growing.
- [Add original data or first-hand expertise](https://seo-mcp.io/t/add-original-data-or-first-hand-expertise) — Original data and first-hand experience are the hardest parts of E-E-A-T to fake. Publish test results, benchmarks, screenshots or interviews, state sample size and date range, and cite primary sources. Update the data when it changes and keep past versions verifiable.
- [Submit your sitemap in Search Console](https://seo-mcp.io/t/submit-your-sitemap-in-search-console) — A sitemap is a hint, not a guarantee, but submitting it in Search Console shortens discovery for new URLs and reports parse errors. Submit under the property that owns the URLs, keep entries canonical and indexable, and resubmit only when the file or its lastmod values actually change.
- [Keep CLS under 0.1 on every page](https://seo-mcp.io/t/keep-cls-under-0-1-on-every-page) — Cumulative Layout Shift scores unexpected movement of visible content. Good means 0.1 or less at p75. The main causes are images without dimensions, injected ads or banners, and web fonts changing metrics. Reserve space, preload fonts and never insert content above existing content.
- [Add pagination handling for archives](https://seo-mcp.io/t/add-pagination-handling-for-archives) — Paginated archives need crawlable anchor links, a self-referencing canonical on each page and a clear stop at the last page. rel=next and rel=prev are no longer used for indexing. Ensure new items get internal links and that page two is not blocked or redirected to page one.
- [List products on the marketplaces your buyers already search](https://seo-mcp.io/t/list-products-on-the-marketplaces-your-buyers-already-search) — Marketplaces such as Amazon, eBay and Etsy capture product searches that never reach an independent store. Pick one marketplace where your category sells, list the same SKUs with consistent titles, attributes and images, and link the listing to the brand. Keep price and stock synchronized with the store so the listing does not oversell, and measure whether the listing cannibalizes direct sales.
- [Serve security headers](https://seo-mcp.io/t/serve-security-headers) — Security headers reduce injection, clickjacking and downgrade risk. Send HSTS with a long max-age, a Content-Security-Policy in report-only mode first, X-Content-Type-Options nosniff, a Referrer-Policy and frame-ancestors. Verify with curl headers on the production host before you enforce the policy.
- [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.
- [Set canonicals and sitemap with Astro integrations](https://seo-mcp.io/t/set-canonicals-and-sitemap-with-astro-integrations) — Astro needs a production site value before canonicals and sitemaps can be correct. Set site in astro.config.mjs, install the @astrojs/sitemap integration, and let it emit sitemap-index.xml with child files. Then render an absolute canonical in the layout from Astro.url and Astro.site so every page references itself.
