{"id":1341,"date":"2026-08-20T09:35:07","date_gmt":"2026-08-20T09:35:07","guid":{"rendered":"https:\/\/www.freethought.uk\/help\/moving-wordpress-from-a-subdomain-to-an-addon-domain-on-cpanel-reseller-hosting\/"},"modified":"2026-08-20T09:35:07","modified_gmt":"2026-08-20T09:35:07","slug":"moving-wordpress-from-a-subdomain-to-an-addon-domain-on-cpanel-reseller-hosting","status":"publish","type":"post","link":"https:\/\/www.freethought.uk\/help\/moving-wordpress-from-a-subdomain-to-an-addon-domain-on-cpanel-reseller-hosting\/","title":{"rendered":"Moving WordPress from a Subdomain to an Addon Domain on cPanel Reseller Hosting"},"content":{"rendered":"\n<p>This guide walks you through migrating a WordPress site from a subdomain (e.g. <code>mysite.yourdomain.co.uk<\/code>) to a newly added addon domain (e.g. <code>mysite.co.uk<\/code>) on your cPanel reseller hosting account.<\/p>\n\n\n\n<p>Before you begin, make sure you have: cPanel access, the new domain&#8217;s nameservers pointed to Freethought nameservers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-1-verify-dns-is-pointing-to-cloudabove\">Step 1: Verify DNS is Pointing to cloudabove<\/h2>\n\n\n\n<p>Before adding the domain to cPanel, confirm the new domain&#8217;s nameservers are pointing to us. You can check this using a tool like <a href=\"https:\/\/www.whatsmydns.net\/\" target=\"_blank\" rel=\"noreferrer noopener\">whatsmydns.net<\/a> <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-2-add-the-domain-as-an-addon-domain-in-cpanel\">Step 2: Add the Domain as an Addon Domain in cPanel<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log in to cPanel for the reseller account hosting the subdomain site.<\/li>\n\n\n\n<li>Navigate to <strong>Domains<\/strong> (or <strong>Addon Domains<\/strong> on older cPanel versions).<\/li>\n\n\n\n<li>Click <strong>Create A New Domain<\/strong>.<\/li>\n\n\n\n<li>Enter the new domain name (e.g. <code>mysite.co.uk<\/code>).<\/li>\n\n\n\n<li>cPanel will auto-populate the document root, typically <code>public_html\/mysite.co.uk<\/code>. You can customise this if needed.<\/li>\n\n\n\n<li>Click <strong>Submit<\/strong> \/ <strong>Create<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p>If the domain is already listed under Domains, skip this step.<a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-3-move-wordpress-files-to-the-new-domains-directory\">Step 3: Move WordPress Files to the New Domain&#8217;s Directory<\/h2>\n\n\n\n<p>You need to copy (or move) the WordPress files from the subdomain&#8217;s directory to the addon domain&#8217;s document root.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Option A: Using File Manager in cPanel\n<ol class=\"wp-block-list\">\n<li>Open\u00a0<strong>File Manager<\/strong>\u00a0in cPanel.<\/li>\n\n\n\n<li>Navigate to the subdomain&#8217;s document root (e.g.\u00a0<code>public_html\/mysite<\/code>\u00a0or a subdomain-specific directory).<\/li>\n\n\n\n<li>Select all files and folders inside.<\/li>\n\n\n\n<li>Click\u00a0<strong>Copy<\/strong>\u00a0(not Move, so you have a fallback).<\/li>\n\n\n\n<li>Set the destination to the addon domain&#8217;s document root (e.g.\u00a0<code>public_html\/mysite.co.uk<\/code>).<\/li>\n\n\n\n<li>Wait for the copy to complete.<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Option B: Using SSH \/ Terminal\n<ul class=\"wp-block-list\">\n<li>cp -a \/home\/username\/public_html\/mysite\/* \/home\/username\/public_html\/mysite.co.uk\/<\/li>\n\n\n\n<li>The\u00a0<code>-a<\/code>\u00a0flag preserves permissions and copies hidden files (like\u00a0<code>.htaccess<\/code>).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-4-update-wordpress-urls-in-the-database\">Step 4: Update WordPress URLs in the Database<\/h2>\n\n\n\n<p>WordPress stores the site URL in the database. You must update this or the site will redirect back to the old subdomain.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Option A: Using phpMyAdmin\n<ol class=\"wp-block-list\">\n<li>Open\u00a0<strong>phpMyAdmin<\/strong>\u00a0from cPanel.<\/li>\n\n\n\n<li>Select the WordPress database (check\u00a0<code>wp-config.php<\/code>\u00a0if unsure which database it uses).<\/li>\n\n\n\n<li>Open the\u00a0<code>wp_options<\/code>\u00a0table (prefix may vary).<\/li>\n\n\n\n<li>Find the rows where\u00a0<code>option_name<\/code>\u00a0is\u00a0<code>siteurl<\/code>\u00a0and\u00a0<code>home<\/code>.<\/li>\n\n\n\n<li>Edit both values, changing the old subdomain URL to the new domain:\n<ul class=\"wp-block-list\">\n<li>Old:\u00a0<code>https:\/\/mysite.yourdomain.co.uk<\/code><\/li>\n\n\n\n<li>New:\u00a0<code>https:\/\/mysite.co.uk<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Option B: Using WP-CLI (if available)\n<ul class=\"wp-block-list\">\n<li><code>cd \/home\/username\/public_html\/mysite.co.uk <\/code><\/li>\n\n\n\n<li>Run &#8211; <code>wp search-replace 'https:\/\/mysite.yourdomain.co.uk' 'https:\/\/mysite.co.uk' --all-tables<\/code><\/li>\n\n\n\n<li>This is the preferred method as it also catches serialised data in options, postmeta, and widgets.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>If you only update wp_options and miss serialised URLs elsewhere, you may see broken images or widget settings. WP-CLI search-replace handles this automatically.<a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-5-update-wp-config-php-if-needed\">Step 5: Update wp-config.php (if needed)<\/h2>\n\n\n\n<p>Open <code>wp-config.php<\/code> in the new location and check for any hardcoded paths or URLs. If the database is the same one used by the subdomain install, no database credentials need changing. However, if you see lines like:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">define('WP_HOME', 'https:\/\/mysite.yourdomain.co.uk');\ndefine('WP_SITEURL', 'https:\/\/mysite.yourdomain.co.uk');<\/pre>\n\n\n\n<p>Update them to the new domain, or remove them entirely (WordPress will then use the database values).<a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-6-install-verify-ssl-on-the-new-domain\">Step 6: Install\/Verify SSL on the New Domain<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In cPanel, go to <strong>SSL\/TLS Status<\/strong> (or <strong>AutoSSL<\/strong>).<\/li>\n\n\n\n<li>Confirm the new domain has a valid SSL certificate, or run AutoSSL to issue one.<\/li>\n\n\n\n<li>Once SSL is active, make sure your WordPress URLs use <code>https:\/\/<\/code>.<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-7-test-the-new-domain\">Step 7: Test the New Domain<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Visit <code>https:\/\/mysite.co.uk<\/code> and confirm the site loads.<\/li>\n\n\n\n<li>Check the WordPress admin at <code>https:\/\/mysite.co.uk\/wp-admin<\/code>.<\/li>\n\n\n\n<li>Browse several pages to confirm links, images, and styles load correctly.<\/li>\n\n\n\n<li>Check for mixed content warnings in the browser console (F12 \u2192 Console).<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-8-clean-up-the-old-subdomain\">Step 8: Clean Up the Old Subdomain<\/h2>\n\n\n\n<p>Once you&#8217;ve confirmed everything works on the new domain:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Optional redirect<\/strong>: Add a 301 redirect from the old subdomain to the new domain in the subdomain&#8217;s <code>.htaccess<\/code>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">RewriteEngine On\nRewriteRule ^(.*)$ https:\/\/mysite.co.uk\/$1 [R=301,L]<\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Remove old files<\/strong>: Once you&#8217;re confident the new site is stable (give it a few days), delete the WordPress files from the old subdomain directory.<\/li>\n\n\n\n<li><strong>Remove the subdomain<\/strong>: If it&#8217;s no longer needed, delete it from cPanel \u2192 Domains\/Subdomains.<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"troubleshooting\">Troubleshooting<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Site redirects to old subdomain\n<ul class=\"wp-block-list\">\n<li>The\u00a0<code>siteurl<\/code>\u00a0or\u00a0<code>home<\/code>\u00a0values in the database still point to the old URL. Re-check\u00a0<code>wp_options<\/code>\u00a0and\u00a0<code>wp-config.php<\/code>.<\/li>\n\n\n\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mixed content warnings (padlock missing)\n<ul class=\"wp-block-list\">\n<li>Some URLs in the database still reference\u00a0<code>http:\/\/<\/code>\u00a0or the old subdomain. Run a full search-replace using WP-CLI or a plugin like Better Search Replace:<\/li>\n\n\n\n<li><code>wp search-replace 'http:\/\/mysite.yourdomain.co.uk' 'https:\/\/mysite.co.uk' --all-tables<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Email routing affected after migration\n<ul class=\"wp-block-list\">\n<li>If the old subdomain was under the same cPanel account, email routing should be unaffected. If the new addon domain has its own email accounts, configure MX records and email accounts under\u00a0<strong>Email Accounts<\/strong>\u00a0in cPanel. If email was routing via the subdomain&#8217;s parent domain, no changes are needed.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Permissions errors or white screen\n<ul class=\"wp-block-list\">\n<li>Ensure file permissions are correct:\u00a0<code>644<\/code>\u00a0for files,\u00a0<code>755<\/code>\u00a0for directories. Run:<\/li>\n\n\n\n<li>find \/home\/username\/public_html\/mysite.co.uk -type f -exec chmod 644 {} \\; find \/home\/username\/public_html\/mysite.co.uk -type d -exec chmod 755 {} \\;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"when-to-escalate-to-support\">When to Escalate to Support<\/h2>\n\n\n\n<p>Contact cloudabove support if:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DNS is correctly pointed but the addon domain won&#8217;t resolve (possible server-side DNS zone issue)<\/li>\n\n\n\n<li>AutoSSL repeatedly fails on the new domain<\/li>\n\n\n\n<li>Database access is restricted or you&#8217;re unsure which database belongs to the site<\/li>\n\n\n\n<li>The migration involves changing cPanel accounts (cross-account moves require support assistance)<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This guide walks you through migrating a WordPress site from a subdomain (e.g. mysite.yourdomain.co.uk) to a newly added addon domain (e.g. mysite.co.uk) on your cPanel reseller hosting account. Before you begin, make sure you have: cPanel access, the new domain&#8217;s nameservers pointed to Freethought nameservers. Step 1: Verify DNS is&hellip;<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,26],"tags":[],"class_list":["post-1341","post","type-post","status-publish","format-standard","hentry","category-cpanel","category-wordpress"],"_links":{"self":[{"href":"https:\/\/www.freethought.uk\/help\/wp-json\/wp\/v2\/posts\/1341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freethought.uk\/help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freethought.uk\/help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freethought.uk\/help\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freethought.uk\/help\/wp-json\/wp\/v2\/comments?post=1341"}],"version-history":[{"count":0,"href":"https:\/\/www.freethought.uk\/help\/wp-json\/wp\/v2\/posts\/1341\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.freethought.uk\/help\/wp-json\/wp\/v2\/media?parent=1341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freethought.uk\/help\/wp-json\/wp\/v2\/categories?post=1341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freethought.uk\/help\/wp-json\/wp\/v2\/tags?post=1341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}