Skip to content

URL Migration Map

This is the operational URL map for moving seller-wide GFMR pages from markdown-renderer.wakalab.dev (the Live Lab) to wakalab.dev (the canonical Wakalab site). It implements the ownership rules in Content Architecture.

Use a 301 when the old page and the destination serve the same intent. A migrated URL must not remain indexable as a second 200 page. The Lab keeps only distinct rendering demonstrations and GFMR-specific technical material.

Redirect map

The WordPress snippet at tools/wp-abilities/snippet/gfmr-demo-abilities.php is the deployable source for these redirects. For each row, the Japanese request is redirected to the Japanese destination; ?gfmr_lang=en (or the /en/ legacy prefix) selects the English destination.

Old WordPress URLCanonical Wakalab URLTreatmentSitemap
/legal//legal/301Exclude from WordPress sitemap
/pricing//products/markdown-renderer-for-github/pro301Exclude
/license//products/markdown-renderer-for-github/pro301Exclude
/documentation//products/markdown-renderer-for-github/301Exclude
/roadmap//products/markdown-renderer-for-github/roadmap301Exclude
/markdown-renderer-for-github/roadmap//products/markdown-renderer-for-github/roadmap301Exclude
/changelog//products/markdown-renderer-for-github/changelog301Exclude
/markdown-renderer//products/markdown-renderer-for-github/301Exclude
/examples/itself on the Labself-canonicalKeep when it remains a working demonstration
/tech/itself on the Labself-canonicalKeep when it remains GFMR-specific

Legacy nested forms for pricing, license, legal, documentation, and changelog follow the same 301 policy. They are retained in the PHP redirect map so historical links do not create a redirect chain.

Deployment and verification

  1. Copy the repository snippet into WordPress Code Snippets and enable it. Confirm its version with node tools/wp-abilities/client/cli.mjs ping.

  2. Run APPLY=1 node scripts/migrate-wordpress-to-gfmr-lab.mjs. It sets the Lab landing page and drafts the managed retired pages only after the routing snippet reports version 1.11.0 or later.

  3. Confirm each old URL is exactly one 301, then the destination is 200:

    sh
    curl -sSI 'https://markdown-renderer.wakalab.dev/pricing/?gfmr_lang=en'
    curl -sSI https://markdown-renderer.wakalab.dev/pricing/
  4. Audit each destination with the language cookie that the redirect sets. It must have one canonical tag, en, ja, and x-default hreflang links, and no conflicting canonical URL:

    sh
    node tools/wp-abilities/client/cli.mjs seo-audit \
      --url https://wakalab.dev/ja/products/markdown-renderer-for-github/pro \
      --cookie 'pref-lang=ja'
    RUN_LIVE_WP_SEO_AUDIT=1 node --test tools/wp-abilities/test/seo-audit-live.test.mjs
  5. Confirm the retired paths are absent from both https://markdown-renderer.wakalab.dev/wp-sitemap.xml and the Rank Math page sitemap. Do not remove a URL from a sitemap until its 301 is live.

Search Console checklist

  • [ ] Submit the updated https://wakalab.dev/sitemap.xml and the WordPress sitemap after the redirects are live.
  • [ ] Inspect one old URL and its English and Japanese destinations; record that Google sees the 301 and selected canonical.
  • [ ] At 7 days, review Page indexing for redirect and duplicate-canonical warnings.
  • [ ] At 28 days, review indexed URL counts and redirect errors; fix any multi-hop redirect.
  • [ ] At 90 days, review search performance and keep only URLs with distinct Lab content indexable.

Never use canonical or noindex in place of a 301 for equivalent content. noindex,follow is reserved for a necessary Lab navigation summary with genuinely no search value.