Project Workplan

SEO Migration Workplan

marcolaterza.com — WordPress to Clean HTML Redesign · Zero Authority Loss Strategy

Timeline: 2 weeks + monitoring Investment: €600 2 payments of €300
View Official Invoice
Week 1 0/6 done
PHASE 1

Audit & Backup (Pre-Migration)

Deep data collection of the current state to ensure no existing SEO signals are lost.

Status Area Task Detailed Instructions
Technical Crawling Deep crawl of the current website Use Screaming Frog or Sitebulb. Crawl 100% of live URLs. Export master Excel with: URL, Status Code, Title, Meta Desc, H1, H2, and Canonical.
View Additional Details

Crucial: This Excel file will be our 'Source of Truth' in Phase 5. Ensure you crawl as Googlebot Smartphone and disable JavaScript rendering if the site loads quickly without it, to see the raw code.

External Authority Backlink Profile Export (GSC + Ahrefs/SEMrush)Added scope Export Search Console → Links (plus Ahrefs/SEMrush if available) to identify which old URLs hold external backlinks. This is the real authority map — the internal crawl only tells you what exists, not what's worth protecting.
View Additional Details

Why this matters: a "zero authority loss" plan that never looks at the external link profile has the biggest gap right where it counts. Any URL with backlinks gets top priority in the Phase 3 redirection matrix — losing one of these costs more than losing ten orphan pages.

Performance Data GSC Performance Export (Top URLs & Queries)Added scope Export the top URLs and queries by clicks from Search Console. Without this, every Status-200 page gets treated equally in QA and on-page care — with it, effort is weighted toward what actually drives traffic (typically the home page + a handful of pages carry the bulk of clicks).
View Additional Details

Use it for: risk-weighting the Phase 3 redirect QA and the Phase 2 meta/schema pass — the pages on this list get checked first and checked twice.

Digital Assets Inventory of Images and PDFs List all images in /wp-content/uploads/ and any indexed PDF files. Many users arrive via Google Images.
Structured Data Schema.org Backup (Yoast) Extract the JSON-LD injected by Yoast SEO on the homepage and service pages. This defines the commercial entity to Google (LocalBusiness, Organization).
View Additional Details

Action: Open the source code of the homepage, search for "application/ld+json" class="yoast-schema-graph" and save that code block intact in a text file.

Content Blog & Text Export Migrate the content from the WP SQL database to clean files (Markdown or pure HTML). Preserve original publishing dates.
Week 1 0/8 done
PHASE 2

Development & Structure (Clean Code)

Frontend construction optimizing for Core Web Vitals without losing the semantics Google already knows — filtered through a UX/UI pass focused on ultra-fast loading and maximum legibility.

Status Area Task Detailed Instructions
URL Architecture URL Mapping Decision (Redesign, Not Mirror)Added scope This is a redesign + repositioning, not a like-for-like migration — the new site already has a different structure (e.g. /uber-marco//ueber-mich, /blog//insights, plus new pages like /mental-coaching-zuerich, /executive-health-coaching-zuerich, /personal-training-zuerich). For every old URL, decide explicitly: keep the slug, or 301 it to its new equivalent — and document why.
View Additional Details

Why the change: "URL must be identical" only holds for a true mirror migration. Here the structure intentionally changed to support the new positioning — so the safety net is a complete, deliberate URL-by-URL map (feeding Phase 3), not an identical-routes rule.

Meta Tags Recreating the SEO <head> Each page must have its exact Title and Meta Desc from the Phase 1 Excel. For structured data: update the Person/ProfessionalService JSON-LD to the new positioning (performance/executive coaching, not just personal training) — do not clone the old Yoast graph 1:1.
Strategy Keyword Ownership Decision: "Personal Trainer Zürich"Added scope The new site has two pages that can target this term: the homepage and /personal-training-zuerich. Decide explicitly which one leads. Decision: homepage keeps "Personal Trainer Zürich" in title + H1 (it already ranks for it); /personal-training-zuerich targets deeper, longer-tail intent (program detail, pricing, booking) to avoid cannibalizing the homepage.
View Additional Details

Why this matters: two pages competing for the same head term split ranking signals instead of stacking them. Set the target keyword per page once, here, so the meta/H1 work above doesn't accidentally create the cannibalization it's meant to prevent.

Structure Preserving Internal Link Juice Recreate the main menu, footer, and any sidebar widgets. Keep text links exactly where they were. Avoid orphan pages.
Performance Core Web Vitals Optimization All images must be in WebP format. Implement native lazy-loading loading="lazy" for images below the fold. Avoid render-blocking CSS.
UX/UI UX/UI Pass — Ultra-Fast & LegibleAdded scope Filter every template through a UX/UI review focused on two things: instant perceived load (lightweight layout, no heavy libraries, minimal CSS/JS) and maximum legibility (type scale, contrast, spacing, comfortable line lengths on mobile).
View Additional Details

Goal: the site should feel instant and effortless to read. Faster pages and clearer reading directly improve engagement signals (lower bounce, longer dwell time) that feed back into rankings.

Typography Font Research & Selection — Performance/UX (Indirect SEO Benefit)Added scope Research and select a Google Font that guarantees legibility and loads efficiently. The font itself isn't a ranking factor — but how it loads affects LCP and CLS (real Core Web Vitals signals), and its readability drives the engagement metrics (bounce, dwell time) that do feed back into rankings.
View Additional Details

Selection criteria: excellent on-screen legibility at body sizes, few weights needed (lighter payload), good language coverage, and clean rendering on both desktop and mobile.

Implementation: self-host or preload the font with font-display: swap, subset to the characters actually used, and limit weights — this avoids layout shift (CLS) and render delay (LCP), which are ranking factors; the font choice itself is not.

Tracking Analytics & Tracking Migration (GA4)Added scope Migrate the GA4 measurement ID and any conversion/event tags into the new site before launch. Verify the Search Console property is set at domain level (not URL-prefix) so it captures both the old and new paths through the transition.
View Additional Details

Why this matters: a from-scratch rebuild is the easiest way to silently drop the analytics tag — losing data continuity on an SEO project is exactly the kind of gap a client notices first.

Week 2 0/4 done
PHASE 3

Redirection Matrix (The Critical Step)

Management of any route changes to guarantee a complete transfer of authority.

Status Area Task Detailed Instructions
301 Strategy Redirection Matrix (Excel) Compare Phase 1 Excel with the new site map. Create a redirections file, prioritized by the Phase 1 backlink export. Map every blog post individually/blog/<slug>/insights/<slug> — never just the /blog/ parent, or each post's individual ranking signal is lost. NEVER allow a 404 error!
View Additional Details

Implementation: Depending on where the HTML is hosted, this is done via .htaccess (Apache), nginx.conf (Nginx), or a _redirects / vercel.json file for modern platforms.

Media Image Redirection (wp-content) Configure a RegEx rule on the server that takes old paths /wp-content/uploads/(.*) and 301 redirects them to the new folder /assets/img/$1.
Crawler Control Block Staging from Indexing (Vercel Preview)Added scope The staging preview (e.g. premium-experience.vercel.app) is publicly reachable. Add noindex (robots meta + X-Robots-Tag) on the preview while in pre-launch, and confirm it isn't already indexed by Google.
View Additional Details

At launch: make sure the .vercel.app subdomain is taken down or redirected to the production domain — left live, it's a permanent duplicate-content competitor to the real site.

Testing Staging Redirect Test (Full List) Before going live, run the full master URL list against staging (not a 10-route sample) to verify every old URL returns a 301 instantly, with no chains or loops (old → final URL directly).
View Additional Details

Optional: temporarily resubmit the old sitemap.xml in Search Console alongside the new one right after launch — it speeds up how fast Google discovers the 301s instead of waiting for organic recrawl.

Week 2 0/3 done
PHASE 4

Sitemaps & Crawl Control

Precise guides so Google bots understand the new structure immediately.

Status Area Task Detailed Instructions
Indexing Generating the new sitemap.xml Dynamically or statically build the sitemap.xml file with all final routes. Ensure URLs include https://www.
View Additional Details

Note: Do not include URLs in the sitemap that will be redirected (301) or have Canonical tags pointing elsewhere. Only clean Status 200 URLs.

Crawler Control Creation of robots.txt Add the robots.txt file to the root of the site with directives allowing User-agent: * to crawl everything, and include the absolute path to the sitemap.
Technical SEO Canonical, Lang Attribute & hreflang (DE/EN) Review file by file that the <link rel="canonical" href="..."> tag points to its own URL, and that <html lang="..."> matches the page's language (de-CH or en). On every page, add hreflang annotations (de-CH, en, x-default) pointing to the language counterpart.
View Additional Details

Why this matters: the site toggles DE | EN. Without hreflang, the two language versions compete with each other and Google can serve the wrong one to Zürich's German-speaking locals or English-speaking expats.

Continuous Monitoring 0/5 done
PHASE 5

Launch & Monitoring (D-Day)

Final deployment and meticulous live verification to ensure the transfer of authority — closed with a full speed & SEO performance audit.

Status Area Task Detailed Instructions
Deployment DNS Switch to Production Turn off the WordPress server (keeping the database backed up) and point A and CNAME records to the new server hosting the static HTML code.
Final Audit Live Verification with Screaming Frog IMPORTANT: Load the master Excel from Phase 1 into the crawler (List Mode) and run it against the newly launched site. Ensure ALL URLs return a 200 or 301 code.
View Additional Details

Zero Error Tolerance: If you see a 404 or 500 HTTP error on this list, you must pause, go to the redirection rules (Phase 3), and fix it immediately before Googlebot reads it.

Performance Speed & SEO Performance AuditAdded scope Run a full audit of speed and overall SEO performance on the live site to guarantee everything is fast: PageSpeed Insights / Lighthouse on every key template, Core Web Vitals (LCP, CLS, INP), font loading, image weight, and on-page SEO checks.
View Additional Details

Pass criteria: Lighthouse Performance and SEO scores in the green (90+) on mobile, LCP < 2.5s, CLS < 0.1. Any template below target gets optimized and re-tested before sign-off.

Search Console Sitemap Submission & Manual Indexing Log into Google Search Console. Delete the old Yoast sitemap, submit the new sitemap.xml. Use URL Inspection on the Home page and click 'Request Indexing'.
Metrics 15-Day Monitoring (GSC & Core Web Vitals) Check GSC (Pages tab) daily for spikes in 404s. Run a PageSpeed Insights report to validate technical success (LCP < 2.5s) which will boost ranking.
Investment

Investment & Payment Schedule

The full migration is covered by a fixed fee of €600, split into two equal payments.

Payment 1 · 50% €300 On acceptance — kicks off Phase 1
Payment 2 · 50% €300 On completion — launch & final audit delivered
Total €600 Fixed fee · No VAT charged (export of services)

Bank transfer details, payment references and the applicable tax notes are on the official invoice VAL-2026-0003 issued by Valírica.

View Official Invoice (VAL-2026-0003)