Website seo and indexing
Skill POWR-DATA/mtx-skills/skills/web/website-seo-and-indexing
Reusable AI agent skills for application development, data, architecture, domain modelling and delivery workflows.
npx -y skills add POWR-DATA/mtx-skills --skill website-seo-and-indexingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Prepare a static website for search engine indexing and submit it to Google Search Console
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
15.3 KB, ~3.5k tokens by cl100k_base, as published. Nobody here has run it
Website SEO and Indexing
Purpose
Prepare a static website for search engine discovery and indexing by implementing the core technical SEO requirements — canonical URLs, sitemap, robots.txt, meta tags, and Google Search Console verification — so that pages are crawled correctly and appear in search results.
When to use
Use this skill when launching a new website or auditing an existing one for indexing gaps. Apply it after the site is live and accessible via HTTPS on its primary domain.
This skill covers the technical SEO layer. It does not cover content strategy, keyword research, backlink building, or paid search.
Inputs expected
Provide as many of the following as available. Partial inputs are acceptable — the AI should identify gaps and ask structured follow-up questions only where needed.
- Primary domain (e.g.
https://www.example.com) — this is the canonical base URL - List of pages and their URLs
- Hosting platform (affects how
sitemap.xml,robots.txt, and static files are served) - Whether Google Search Console access is available
- Whether a DNS TXT record can be added to the domain (required for Domain property verification in GSC)
- Any existing
sitemap.xml,robots.txt, or<meta>tags in place
Guiding principles
- The canonical URL should be the
wwwversion of the domain. Canonical tags must match the domain that actually serves the page — if the site redirects apex to www, the canonical must usewww. - Every page needs a
<link rel="canonical">tag. Even on a single-page site, it prevents duplicate content signals if the page is ever accessible at multiple URLs (apex and www, http and https). sitemap.xmlmust be a real static file, not served via a CMS or framework route that could return HTML. Verify it returnsContent-Type: application/xml. On Azure SWA, this requires an explicit route instaticwebapp.config.json.robots.txtmust be a static file at the root. Do not route it through a SPA fallback. TheSitemap:directive inrobots.txtshould reference the full absolute URL.- Use a Domain property in Google Search Console, not a URL-prefix property. A Domain property tracks all variants (http, https, www, apex) in a single view and requires a DNS TXT verification record.
- Submit the sitemap in GSC after verification. Use the URL Inspection tool to check individual pages after submission.
lastmoddates insitemap.xmlshould reflect actual content changes. Do not set future dates. Priority values (0.0–1.0) are relative — the homepage is typically 1.0.- Avoid duplicate indexing by ensuring the non-canonical URL (apex, http) redirects to the canonical before Google crawls it. On Azure SWA, the apex → www redirect is automatic but takes 20–30 minutes to activate after domain validation.
- GSC shows a robots.txt entry for every URL variant it has crawled. Only the canonical (HTTPS www) needs to return a valid response. A 404 on the HTTP non-www variant is harmless if the HTTPS www version shows "Fetched".
- Audit existing canonical tags before adding new ones. The tag may already exist and be correct — if it is, the redirect and internal links are the more likely cause of any GSC duplicate signal, not a missing canonical.
- A 301 redirect on
/index.html → /is only half the fix for a GSC duplicate. Googlebot follows internal links before encountering redirects — if navigation or anchor links still referenceindex.html, the duplicate persists. The redirect and internal link cleanup are required together. - When one
.htmlURL duplicate is found in GSC, check all pages for the same pattern. Ifindex.htmlcreates a duplicate on one page, it almost certainly exists across the whole site. - OG image must use a solid background and be exactly 1200×630px and under 600KB. Transparent PNGs appear invisible or broken on social share cards — platforms render cards on varying backgrounds. WhatsApp in particular rejects oversized or transparent images. This failure only surfaces when a URL is actually shared, not during local testing.
widthandheightattributes on<img>elements serve aspect ratio reservation for CLS prevention, not display sizing. The browser uses them to pre-allocate space before the image loads. The ratio matters; exact pixel values do not need to match CSS dimensions.- "Discovered – currently not indexed" in Search Console is not a technical error — it means Google knows the page exists but has not yet crawled it. The fix is URL Inspection → Request Indexing, not Validate Fix. Validate Fix is only for confirmed code changes that resolved a prior error.
- The Google Indexing API requires OAuth Desktop app credentials, not a service account, when the Search Console property is a Domain property — Domain properties reject service account emails with "email not found". Either create a URL-prefix property (
https://www.<domain>/) alongside the Domain property and add the service account as Owner there, or use OAuth with the Google account that owns the property. - The OAuth flow for the Indexing API saves access and refresh tokens to
token.jsonafter first browser login; subsequent runs refresh silently. Bothoauth-client.jsonandtoken.jsonmust be gitignored — they grant write access to your Search Console property. - For a folder that mixes public landing pages with noindex auth/utility pages, do not blanket-noindex the folder. Apply
X-Robots-Tag: noindexper auth route only, and keeprobots.txtcrawlable (do notDisallowthe path) — Google must be able to fetch the page to read the noindex directive. - Automate indexing on deploy with a post-deploy CI job that submits every
sitemap.xmlURL to the Google Indexing API using a service-account key (stored as a secret), making the sitemap the single source of truth for what gets submitted. Guard the job to no-op when the secret is absent so it never blocks a deploy, and never fail the build on per-URL errors. See Post-deploy Indexing API CI job inreference.md. - For the Indexing API via a service account, the account must be added as an Owner of the Search Console property (Full/Restricted permissions do not work), and the Web Search Indexing API must be enabled in the same Google Cloud project that owns the service account — API calls are attributed to the SA's project, so enabling it in a different project silently fails.
- Load the service-account JSON into a GitHub Actions secret with
gh secret set NAME < key.json(uploads encrypted, never printed or committed). Extract only the non-secretclient_emailfor the Search Console owner step; nevercatthe whole key or place it in the repo. See reference.md.
Process
-
Confirm the canonical base URL — the primary domain, protocol, and www/apex decision. This is used in all canonical tags and the sitemap.
-
Audit existing pages
- List all public HTML pages
- Check each for
<link rel="canonical">,<title>, and<meta name="description"> - Check OG tags:
og:title,og:description,og:image— note any missing or using a transparent image - Check for
.htmlURL variants (e.g./index.html,/page.html) that could create GSC duplicate entries - Check that
<title>tags are unique across all pages and use the correct brand name — these are invisible in browser UI and inconsistencies persist without an explicit audit
-
Audit internal links for
.htmlreferences- If redirects exist for
.html→ clean URL paths, check that navigation and anchor links do not reference the.htmlform - Googlebot follows links before encountering redirects — internal links pointing to
index.htmlwill direct Googlebot to the duplicate regardless of the redirect
- If redirects exist for
-
Add or verify canonical tags
- Add
<link rel="canonical" href="https://www.<domain>/<path>" />to the<head>of every HTML page - Homepage:
https://www.<domain>/ - Other pages:
https://www.<domain>/<slug>(no trailing slash for non-root pages)
- Add
-
Write
sitemap.xml- Include one
<url>block per public page - Fields:
<loc>,<lastmod>(YYYY-MM-DD format),<changefreq>,<priority> - Homepage priority: 1.0; other pages: 0.7–0.9 depending on importance
- Place at the site root (
/sitemap.xml)
- Include one
-
Write
robots.txt- Allow all crawlers:
User-agent: */Allow: / - Add
Sitemap: https://www.<domain>/sitemap.xml - Place at the site root (
/robots.txt)
- Allow all crawlers:
-
Verify static file serving
- Confirm
sitemap.xmlis served withContent-Type: application/xml - Confirm
robots.txtis served withContent-Type: text/plain - On Azure SWA: add explicit route for
/sitemap.xmlinstaticwebapp.config.jsonand register.xmlMIME type
- Confirm
-
Check per-page meta tags
- Each page should have a unique
<title>and<meta name="description"> - Title: 50–60 characters; description: 120–160 characters
- Avoid identical titles or descriptions across pages
- Each page should have a unique
-
Add a favicon
- Place
favicon.pngorfavicon.icoat the site root - Add
<link rel="icon" type="image/png" href="favicon.png" />to each page's<head>
- Place
-
Set up Google Search Console
- Go to Google Search Console
- Create a Domain property for
<domain>(without protocol or www) - Add the provided DNS TXT verification record to the domain's DNS at the registrar or DNS host
- Wait for DNS to propagate, then click Verify
-
Submit the sitemap
- In GSC: go to Sitemaps → enter
sitemap.xml→ Submit - Wait 24–72 hours for initial crawl
- In GSC: go to Sitemaps → enter
-
Inspect URLs
- Use the URL Inspection tool in GSC on the homepage and key pages
- Check that Google can render the page and that the canonical reported by Google matches the intended canonical
Output format
The AI should produce:
- Canonical tag additions — the exact
<link rel="canonical">line for each page sitemap.xml— complete file content with all pagesrobots.txt— complete file contentstaticwebapp.config.jsonchanges (if applicable) — explicit sitemap route and MIME type- Per-page meta tag review — flag any missing or duplicate titles/descriptions
- Google Search Console setup steps — step-by-step for Domain property creation, TXT verification, and sitemap submission
- Verification checklist — what to check and how after setup
Quality checklist
- Every HTML page has
<link rel="canonical">in<head> - Canonical URLs use the primary domain (www, https) consistently
-
sitemap.xmlexists at/sitemap.xmland returnsContent-Type: application/xml -
robots.txtexists at/robots.txtwithSitemap:directive - Every page has a unique
<title>and<meta name="description"> - Favicon is present and linked on every page
- Google Search Console Domain property created and verified
- Sitemap submitted in GSC
- URL Inspection confirms Google can render the homepage
- Apex and http URLs redirect to the canonical (www, https) before indexing
- Internal links do not reference
.htmlURLs where redirects exist for those paths - OG image uses a solid background — no transparency, exactly 1200×630px, under 600KB
- All
<title>tags are unique and use the correct brand name, including secondary pages - "Discovered – currently not indexed" pages actioned via URL Inspection → Request Indexing, not Validate Fix
- If using the Indexing API manually: OAuth credentials with
oauth-client.jsonandtoken.jsongitignored - If automating via CI: service account added as Owner of the Search Console property, Web Search Indexing API enabled in the SA's own GCP project, key stored as a secret via
gh secret set - Post-deploy index job no-ops when the secret is absent and never fails the build on per-URL errors
- Mixed public/auth folders use per-route
X-Robots-Tag: noindex, not a blanket folder rule, withrobots.txtleft crawlable
Avoid
- Do not use the URL-prefix property in GSC unless the DNS TXT record approach is not available — it only covers a single protocol/subdomain variant
- Do not set
lastmodto future dates or generic dates that don't reflect real content changes - Do not omit canonical tags on any public page, even a simple landing page — duplicate content signals accumulate across http/https and www/apex variants
- Do not serve
sitemap.xmlthrough a SPA fallback — verify the actualContent-Typeheader in a browser dev tools network tab - Do not add
Disallow: /torobots.txtwhile testing and forget to remove it before launch — this blocks all crawlers - Do not assume GSC verification via DNS is instant — allow up to 24–48 hours for TXT record propagation
- Do not add a canonical tag without first checking whether one already exists and is correct — if it is, the redirect and internal links are the more likely cause of any GSC duplicate signal
- Do not treat a 301 redirect on
/index.html → /as a complete fix — internal links pointing toindex.htmlmust also be updated, or Googlebot will still follow them to the duplicate URL - Do not stop at the first
.htmlduplicate found — check all pages, as the pattern typically exists across the whole site - Do not assume
<title>tags are correct — they are invisible in browser UI and brand name inconsistencies on secondary pages can persist indefinitely without a deliberate audit pass - Do not treat a 404 on the HTTP non-www robots.txt entry in GSC as an error — if the canonical HTTPS www version is fetched successfully, the non-canonical 404 is expected and requires no action
- Do not click Validate Fix for a "Discovered – currently not indexed" page — that status is not an error; use URL Inspection → Request Indexing instead
- Do not add a service account to Search Console with Full/Restricted permissions and expect the Indexing API to work — it must be an Owner of the property; on a Domain property a non-Owner SA is rejected with "email not found", so use OAuth Desktop credentials, a URL-prefix property, or add the SA as Owner
- Do not enable the Web Search Indexing API in a different project from the one that owns the service account — calls are attributed to the SA's project and silently fail otherwise
- Do not
cator commit the service-account key — load it withgh secret set NAME < key.jsonand extract onlyclient_emailfor the owner step - Do not blanket-
noindexa folder that mixes public and auth pages, and do notDisallowit in robots.txt — applyX-Robots-Tag: noindexper route and keep the path crawlable so Google can read the directive - Do not commit
oauth-client.jsonortoken.json— they grant write access to your Search Console property
Example usage
My site is live at
https://www.powrdata.com.au— it has a homepage and one other page (/ai-agent-skills). Both are plain HTML files. I want to get the site indexed in Google. What do I need to add or change, and how do I set up Google Search Console?
Source: This skill is sourced from the Matrix Skills library. Learn more at the AI Agent Skills Library.
What ships with it: 4 files
9.1 KB alongside SKILL.md
- example-input.md1.5 KB
- example-output.md4.0 KB
- README.md2.3 KB
- reference.md1.4 KB