Website Changes Walkthrough

CNC Onsite - What's Changed & What's Next

Prepared for Meeting: January 29, 2025

Executive Summary

The CNC Onsite website has been migrated to new infrastructure with proper multilingual support. Key changes:

  • New hosting on Hetzner Cloud with Coolify orchestration (faster, more reliable)
  • Polylang Pro installed for proper language switching (replaces manual /dansk/, /deutch/ folders)
  • 140+ junk pages removed from Google's index
  • SEO plugin switched from Rank Math to Yoast SEO (better Polylang integration)
  • SEO metadata updated on 49 priority pages
  • Monthly maintenance agreement in place (2.000-2.500 kr/mo)
212
Pages Migrated
3
Languages (EN, DA, DE)
140+
Junk Pages Removed
49
Pages SEO Optimized

Polylang Multilingual Setup

The old manual approach to multilingual (separate page hierarchies for each language) has been replaced with Polylang Pro. This is a proper WordPress multilingual solution used by thousands of sites.

❌ Before (Manual)

/dansk/om-os/
/deutch/uber-uns/
/about-us/

Manual folders, no language switching, no hreflang tags

✓ After (Polylang)

/da/om-os/
/de/uber-uns/
/about-us/

Proper language prefixes, automatic switcher, hreflang tags

What This Means for You

Creating Content
  • Create page in one language first
  • Use "+" button to add translations
  • Polylang links them automatically
  • Language switcher shows all versions
Finding Translations
  • Click language icon in page list
  • Or use Polylang column in Pages view
  • Each translation is its own page
  • Changes don't affect other languages

URL Redirects

Content Inventory by Language

LanguagePagesLinked TranslationsCoverage
English (default)1016261%
Danish454191%
German665076%
Note: Unlinked English pages are mostly press coverage articles that only exist in English (coverage in foreign media). This is expected.

SEO Optimization & Cleanup

Major cleanup of technical SEO issues. Over 140 junk pages removed from Google's index, and 49 priority pages optimized with proper meta titles and descriptions.

Rank Math → Yoast Migration

The site was using Rank Math SEO but we switched to Yoast SEO for better Polylang compatibility.

Rank Math

  • Good general SEO plugin
  • Polylang integration exists but limited
  • Some conflicts with translation linking
  • Sitemap issues with multilingual

Yoast SEO

  • Industry standard, battle-tested
  • Official Polylang integration
  • Proper hreflang tag handling
  • Multilingual sitemaps work correctly
Migration: All existing meta titles and descriptions were preserved during the switch. No SEO data was lost.

What Was Fixed

Index Cleanup
  • Set image_pins to noindex
  • Set employee_categories to noindex
  • Set categories to noindex
  • Set post_tag to noindex
  • Updated company info for schema markup
  • Disabled public access to junk post types
Results
  • ~140 system-generated pages removed
  • Only real content pages visible
  • Cleaner XML sitemaps

Meta Optimization

Page-Level SEO
  • 49 priority pages optimized
  • Proper meta titles (60 chars)
  • Compelling descriptions (155 chars)
  • Focus keywords set
Technical SEO
  • Updated robots.txt
  • Proper hreflang tags on all pages
  • Consistent URL structure
  • Removed duplicate content

Plugin Stack

The plugin stack has been cleaned up. Removed duplicate and unused plugins, updated outdated ones, and added Polylang Pro for multilingual support.

Active Plugins

A
ACF Pro
6.7.0.2 (updated from 5.9.9)
P
Polylang ProNew
3.7.6
Y
Yoast SEOReplaced Rank Math
26.7
C
CPT UI
1.18.3
D
Duplicate Post
4.5
M
WP Mail SMTP
4.7.1

Removed Plugins

PluginReason
Rank Math SEOReplaced by Yoast SEO (better Polylang integration)
WP File ManagerSecurity risk - gives file access through WordPress
All-in-One WP Migration (x3)No longer needed - duplicates
DuplicatorNo longer needed - migration complete
EPS 301 RedirectsReplaced by Polylang's built-in redirects
WordfenceReplaced by server-level security
Fluent Forms (x2)Not in use - will use HubSpot forms instead

Theme Modifications

Several fixes were made to the CNCOnsite theme to support Polylang and fix existing bugs.

ChangeDetails
Language DetectionUpdated GetLanguagePrefix() to use Polylang's API instead of manual path detection.
Language SwitcherNew GetLangNav() function using Polylang's language data for the header switcher.
Logo LinkLogo now links to the front page in the current language, not the current page.
ACF Image FixFixed ACF Image Crop format conversion to properly load images in hero sections.

Ongoing Maintenance

A monthly maintenance agreement is in place to keep the site secure, updated, and running smoothly.

Monthly Maintenance (2.000-2.500 kr/md)

Update Schedule

Backup
Update
Test
Verify

Monthly updates run automatically via WPulse (our WordPress maintenance system). The system takes a backup, runs updates, tests the site, and sends a report. If anything breaks, it automatically rolls back.

Next Steps

The migration and multilingual setup is complete. Here's what's remaining before go-live and the Google Ads launch.

Completed
Migration & Polylang Setup
Infrastructure migration, Polylang configuration, SEO cleanup, plugin updates
This Week
Hero Section Updates
Reduce hero heights, add CTA buttons, improve value propositions above the fold
Before Ads Launch
Tracking Setup
HubSpot tracking, Google Ads conversion, LinkedIn Insight Tag, GTM, GA4
Week 5
DNS Cutover
Final testing, DNS change to point to new server, monitoring
Mid-February
Google Ads Launch
Landing pages ready, tracking in place, campaigns go live

Action Items

TaskOwnerPriorityStatus
Approve hero layout optionsJulieHighPending
Test staging site (all languages)Julie, TobiasHighPending
Coordinate DNS change with ChristianTobiasMediumPending
Provide HubSpot tracking codesJulie/JesperHighPending

Infrastructure Migration

The website has been moved from the original hosting provider to Hetzner Cloud with Coolify for container orchestration. This provides better performance, reliability, and easier maintenance.

Before

  • ✗ Unknown hosting provider
  • ✗ Limited access for maintenance
  • ✗ Manual updates required
  • ✗ No proper backup system

After

  • ✓ Hetzner Cloud (Germany)
  • ✓ Full SSH and admin access
  • ✓ Automated monthly updates
  • ✓ Daily backups (7-day retention)

Technical Details

ComponentDetails
Server LocationHetzner Cloud, Nuremberg (Germany) - GDPR compliant
WordPress Version6.7 (latest)
PHP Version8.3
DatabaseMariaDB 11
OrchestrationCoolify (Docker-based, zero-downtime deploys)

Questions?

This walkthrough covers all major changes. For technical details, documentation is available in Obsidian at 01 Clients/CNC Onsite/Website/.