Bing Webmaster Tools skill

Bing Webmaster Tools setup, IndexNow protocol, URL submission, backlink analysis, AI Performance report (Feb 2026), Generative Engine Optimization (GEO) per Bing's official guidelines, Copilot citation tracking, meta-directive controls for AI surfaces, and Bing-specific SEO. Use when setting up Bing Webmaster Tools, implementing IndexNow, tracking Copilot citations, optimizing for Bing search or AI answers. Install with: npx skills-ws install bing-webmaster.

analyticsv2.0.0Updated
copied ✓
openclawclaude-codecursorcodex
0 installsSecurity scan: cleanSource code

Bing Webmaster Tools & GEO

Workflow

1. Setup & Verification

Verification methods (pick one):

  • XML file upload (BingSiteAuth.xml to root)
  • Meta tag (<meta name="msvalidate.01" content="XXXX" />)
  • CNAME DNS record
  • Auto-verify if already in Google Search Console (import)

Import from GSC: Bing offers one-click import of all your GSC properties — fastest path.

2. IndexNow

IndexNow tells search engines about URL changes instantly. Bing explicitly recommends it for AI freshness: "IndexNow helps ensure that AI systems reference the most current version of a page when generating answers."

Key file (one-time setup): generate a key (8–128 hex chars), serve it as a static text file whose body is exactly the key.

KEY=$(openssl rand -hex 16)          # e.g. a1b2c3...; treat as a public token, not a secret
echo -n "$KEY" > "public/$KEY.txt"   # served verbatim at https://example.com/$KEY.txt

On Next.js/Vercel anything in public/ is served at the domain root automatically; on other hosts drop the file in the web root. Verify with curl https://example.com/$KEY.txt before submitting.

Single URL — always URL-encode the submitted URL so query strings/anchors don't break the request:

curl -G "https://api.indexnow.org/indexnow" \
  --data-urlencode "url=https://example.com/updated-page?ref=launch" \
  --data-urlencode "key=$KEY"

Batch (up to 10,000 URLs per request): all URLs must share the same host as host/keyLocation.

curl -X POST "https://api.indexnow.org/indexnow" \
  -H "Content-Type: application/json" \
  -d '{
    "host": "example.com",
    "key": "'"$KEY"'",
    "keyLocation": "https://example.com/'"$KEY"'.txt",
    "urlList": [
      "https://example.com/page1",
      "https://example.com/page2"
    ]
  }'

Response codes to handle: 200 accepted · 202 accepted, key validation pending · 400 invalid format · 403 key not found/invalid at keyLocation · 422 URL doesn't match host or key mismatch · 429 too many requests (back off and retry with exponential delay). Submitting to any one participating engine (Bing, Yandex, etc.) propagates to the others, so one POST to api.indexnow.org is enough. Log the URLs submitted plus the returned status so you can audit coverage; only re-submit a URL when its content actually changes — repeated pings of unchanged URLs add no value.

Auto-trigger on deploy (Next.js example):

const changedUrls = getChangedPages();
if (changedUrls.length > 0) {
  await fetch('https://api.indexnow.org/indexnow', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      host: 'example.com',
      key: process.env.INDEXNOW_KEY,
      keyLocation: `https://example.com/${process.env.INDEXNOW_KEY}.txt`,
      urlList: changedUrls
    })
  });
}

Deriving getChangedPages() — pick the source that matches your stack; the goal is "files that changed in this deploy → public URLs":

  • Git diff (CI / GitHub Actions, most reliable): diff the deployed commit against the previous one and map page files to routes.
    import { execSync } from 'node:child_process';
    
    function getChangedPages() {
      // GitHub Actions exposes the previous SHA as github.event.before; locally fall back to HEAD~1
      const base = process.env.GITHUB_EVENT_BEFORE || 'HEAD~1';
      const files = execSync(`git diff --name-only ${base} HEAD`, { encoding: 'utf8' })
        .split('\n')
        .filter(Boolean);
    
      return files
        .filter(f => /^src\/app\/.*\/page\.(tsx|mdx)$/.test(f) || /^content\/.*\.mdx$/.test(f))
        .map(fileToUrl)
        .filter(Boolean);
    }
    
    function fileToUrl(file) {
      // src/app/blog/my-post/page.tsx -> https://example.com/blog/my-post
      const route = file
        .replace(/^src\/app/, '')
        .replace(/\/page\.(tsx|mdx)$/, '')
        .replace(/^content/, '')          // content/blog/x.mdx -> /blog/x
        .replace(/\.mdx$/, '')
        .replace(/\/\(.*?\)/g, '')         // strip Next.js route groups: /(marketing)/about -> /about
        .replace(/\/index$/, '');          // /blog/index -> /blog
      return `https://example.com${route || '/'}`;
    }
    
  • Sitemap diff (CMS/SSG without clean Git→route mapping): fetch the freshly built sitemap.xml, compare each <loc>'s <lastmod> against the previous build's sitemap (cache it as a build artifact), and submit only URLs whose lastmod advanced.
  • CMS webhook: trigger from the CMS publish event and read the changed slug(s) straight out of the webhook payload (e.g. Sanity/Contentful/WordPress post.permalink) — most precise for editorial sites.
  • Build manifest: for incremental static regeneration, map regenerated paths from the build output (e.g. Next.js .next/server/app route manifest) to URLs.

Whichever source you use, dedupe and cap each POST at 10,000 URLs.

3. AI Performance report (public preview, Feb 2026)

Bing Webmaster Tools → AI Performance. Microsoft positions this as the first first-party AI-citation analytics shipped by a major search engine; it's the most direct citation telemetry available today regardless of who got there first.

What it shows:

  • How often your content is cited in Copilot, Bing AI summaries, and partner integrations
  • Which URLs are referenced
  • Citation activity over time
  • Since June 2026 (preview rollout): Intents (query-intent categories behind citations), Topics (thematic query clusters), Citation Share (your share of all citations for a grounding query), and Compare (overlay prior time periods)

How to use it:

  • Audit gaps: URLs ranking well in classic Search but missing from AI citations are GEO opportunities.
  • Track wins: Watch citation count after structural rewrites (answer-first, schema, IndexNow ping).
  • Compare with referrer logs: Cross-check bing.com/chat and copilot.microsoft.com referrers against the report.

4. Generative Engine Optimization (GEO) — Bing's official guidance

Bing's updated webmaster guidelines now define GEO as "focused on content eligibility for grounding and reference in AI responses." Bing states GEO doesn't guarantee citation — same as SEO doesn't guarantee ranking.

Best practices Bing lists for becoming a grounding source:

PracticeWhat Bing says
Clear factsPresent facts directly, no vague claims
Entity referencesAvoid ambiguous references; use full names
Naming consistencySame entity names across text, images, video
Topic focusOne topic per URL
Information placementKey info near the top of the page
StructureClear headings, tables, FAQ sections
EvidenceExamples, data, cited sources
FreshnessRegular updates + IndexNow notifications
AuthorityDeepen coverage in related areas

Schema markup: Not officially mandated for citation — clear, well-structured prose can be grounded without it — but JSON-LD helps engines disambiguate entities, prices, authorship, and dates, which is exactly what grounding relies on. Treat it as the de facto structured-data standard across Bing, Google, Perplexity, and ChatGPT; add it where it removes ambiguity rather than chasing a specific citation-rate multiplier (no public, methodologically sound study quantifies the lift as of Jun 2026).

5. Meta directives — effect on Copilot

Bing's 2026 guidelines spell out per-directive AI behavior:

DirectiveEffect on Copilot / AI answers
NOARCHIVEPrevents Copilot use entirely
NOCACHELimits Copilot to URLs, titles, and snippets
DATA-NOSNIPPETMay reduce citation quality
NOINDEXRemoves from both classic Search and AI surfaces

Example — allow classic indexing but limit AI use:

<meta name="robots" content="index, follow, noarchive">

6. Updated abuse policies (2026)

Bing expanded its abuse guidelines alongside GEO:

  • "Prompt Injection and AI Manipulation" — new dedicated section. Attempts to interfere with Bing's or Copilot's language models will be demoted.
  • "Keyword Stuffing and Artificially Engineered Language" — renamed and expanded. Covers content designed to trigger AI citations, not just classic rankings.
  • Scaled content — language softened from "malicious" to: "Large-scale content generated without oversight, quality control, or editorial review often lacks usefulness, accuracy, and originality, and may be excluded from indexing." — aligns with Google's stance: targets intent, not automation itself.

7. URL Submission API

curl -X POST "https://ssl.bing.com/webmaster/api.svc/json/SubmitUrl?apikey=$BING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"siteUrl":"https://example.com","url":"https://example.com/new-page"}'

Daily quota: 10,000 URLs/day for verified sites. Use for bulk migrations; prefer IndexNow for incremental updates.

8. Bing vs Google — what still differs

FactorGoogleBing
Social signalsMinimalModerate ranking factor
Exact-match domainsDiscountedMildly rewarded
Multimedia weightModerateHigher (images, video, transcripts)
Keyword in URLMinorModerate
AI citation telemetryLimited (Search Console partial)First-party AI Performance report
GEO in guidelinesImplicitExplicitly named
llms.txt stanceNot adopted for Search; says standard robots/meta govern Search surfacesNo official position

llms.txt adoption is moving fast in 2026 — recheck both engines' current stance before relying on this row. Google has stated it does not use llms.txt for Search crawling and that standard robots.txt/meta-robots controls govern Search surfaces (this is "not adopted," not a formal ban). Bing has published no official position. Treat llms.txt as low-cost optional housekeeping, not a ranking or citation lever.

9. Backlink analysis

Bing Webmaster provides free backlink data:

  • Inbound links by domain
  • Anchor text distribution
  • Top linked pages
  • New + lost links

Audit checklist:

  • Check anchor text diversity (over-optimized exact-match anchors are a spam signal)
  • Monitor new + lost links weekly
  • Compare profile vs top 3 competitors

Disavow — guarded, not routine. Disavowing is a high-risk action that can suppress legitimate links if misapplied; modern engines already ignore most low-quality links automatically. Only disavow when you have a manual action / link spam notice in Bing Webmaster Tools or Google Search Console, or a clear, audited pattern of paid/spam/negative-SEO links you cannot get removed at the source. Before submitting: export your full link profile and the disavow list as a backup, prefer disavowing at the domain: level over individual URLs, and keep the file under version control so changes are reversible. Do not disavow as a precautionary or recurring task.

10. Reporting cadence

Monthly Bing audit:

  • Crawl errors → fix
  • Search performance (impressions, clicks, CTR)
  • AI Performance — citation count + cited URLs
  • Bing vs Google rankings for top 20 keywords
  • IndexNow submission success rate
  • Sitemap freshness

Sources

URLs and policy wording shift fast in this area — confirm against the live page before citing. Retrieval dates below are when wording in this skill was last checked.