CNC Onsite - What's Changed & What's Next
The CNC Onsite website has been migrated to new infrastructure with proper multilingual support. Key changes:
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.
Manual folders, no language switching, no hreflang tags
Proper language prefixes, automatic switcher, hreflang tags
/dansk/* → /da/* (automatic)/deutch/* → /de/* (automatic)| Language | Pages | Linked Translations | Coverage |
|---|---|---|---|
| English (default) | 101 | 62 | 61% |
| Danish | 45 | 41 | 91% |
| German | 66 | 50 | 76% |
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.
The site was using Rank Math SEO but we switched to Yoast SEO for better Polylang compatibility.
The plugin stack has been cleaned up. Removed duplicate and unused plugins, updated outdated ones, and added Polylang Pro for multilingual support.
| Plugin | Reason |
|---|---|
| Rank Math SEO | Replaced by Yoast SEO (better Polylang integration) |
| WP File Manager | Security risk - gives file access through WordPress |
| All-in-One WP Migration (x3) | No longer needed - duplicates |
| Duplicator | No longer needed - migration complete |
| EPS 301 Redirects | Replaced by Polylang's built-in redirects |
| Wordfence | Replaced by server-level security |
| Fluent Forms (x2) | Not in use - will use HubSpot forms instead |
Several fixes were made to the CNCOnsite theme to support Polylang and fix existing bugs.
| Change | Details |
|---|---|
| Language Detection | Updated GetLanguagePrefix() to use Polylang's API instead of manual path detection. |
| Language Switcher | New GetLangNav() function using Polylang's language data for the header switcher. |
| Logo Link | Logo now links to the front page in the current language, not the current page. |
| ACF Image Fix | Fixed ACF Image Crop format conversion to properly load images in hero sections. |
A monthly maintenance agreement is in place to keep the site secure, updated, and running smoothly.
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.
The migration and multilingual setup is complete. Here's what's remaining before go-live and the Google Ads launch.
| Task | Owner | Priority | Status |
|---|---|---|---|
| Approve hero layout options | Julie | High | Pending |
| Test staging site (all languages) | Julie, Tobias | High | Pending |
| Coordinate DNS change with Christian | Tobias | Medium | Pending |
| Provide HubSpot tracking codes | Julie/Jesper | High | Pending |
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.
| Component | Details |
|---|---|
| Server Location | Hetzner Cloud, Nuremberg (Germany) - GDPR compliant |
| WordPress Version | 6.7 (latest) |
| PHP Version | 8.3 |
| Database | MariaDB 11 |
| Orchestration | Coolify (Docker-based, zero-downtime deploys) |
This walkthrough covers all major changes. For technical details, documentation is available in Obsidian at 01 Clients/CNC Onsite/Website/.