Website management
Migration
Migrate your old club website — prove you control it, bring its pages, news (with categories and tags), events, photos and Additional CSS across as drafts, and download a copy of your site. A WordPress site that cannot install plugins can connect with an application password so the import reads drafts and private pages too; it only reads, and menus are listed for you to rebuild rather than imported. A move from the WordPress plugin also brings SportsPress teams (matching teams you already have by address or name) and fixtures with results into a draft, non-public “Imported fixtures” competition whose season widens to cover them, venues as locations (new ones members only), WooCommerce products with their variants as draft shop products (skipping the Shop, Cart, Checkout and My account pages), and Polylang or WPML translations — the copy in your own language becomes the original and other switched-on languages become draft translations. Players are not copied (they would be personal records), and menus and forms come in a later update. The run shows shop products, teams and fixtures counts. Through the WordPress plugin (once switched on), Admins can bring members across as roster entries without an account — no email is sent at import — then send a claim invitation from Members, with an unsubscribe link and skipping anyone who unsubscribed; cancel old recurring subscriptions at cut-over so nobody pays twice.
Already have a club website somewhere else? Paste its address here and ClubHelix will read the public pages, then rebuild them on your new site as drafts — the words, the page structure, the news archive, the events, and the photos we can reach. You'll find this under Migration in the admin sidebar, in the website-management group. Nothing an import writes is visible to the public until a person opens it and presses publish, so you can run this, read what arrived, and change your mind about any of it. That includes teams brought across by the WordPress plugin: a new one stays hidden until you make it public.
Two things to know before you read any further. Reading a website doesn't bring your member roster across — no crawl of a public website can produce one, because member records sit behind a login. (If your old site is WordPress, the ClubHelix plugin can bring members across once that's switched on for your organisation.) And card details, direct-debit mandates and passwords can never transfer, from any platform to any other. Those are payment-industry and security boundaries, not gaps we're planning to close.
Who can use this
Admins only. Moderators don't see the Migration item in the sidebar and the page won't open for them — every part of an import writes to records that only an admin role can touch, so a moderator would reach a form that could never save.
You also need to show us you control the site you point us at. There are two parts to this, and they do different jobs. You tick a box confirming your organisation owns or controls the website, and we record who ticked it and when — that's the club's word, on the record. Then we check it: we give you a short code, you put it somewhere on the site only someone with access could reach, and we look for it. An import will not start until we've found it.
We added the check because a tick box on its own proves nothing, and we'd rather not be the reason somebody's site gets copied by a stranger. It's a one-off — once a website is verified, every future import and re-run of that site just works, including from www. and without it.
What's on the page
- Start an import (Read another site, once you've run one) — the Your current website address field, the ownership tick box, and Read my site.
- Prove you control this website — your code, four ways to use it, and a Check now button. Once we've found the code this panel shows which way you used and when, and stops asking.
- The run itself — headed by the address you gave us. While it's going you see which stage it's in, in plain words: Waiting to start, Finding the pages on your site, Reading your pages, Converting your content, Copying your images across, Writing your drafts, Finished. You can close the tab; the work carries on without you.
- Everything we wrote is a draft — a standing reminder with a Review the drafts in Pages button, because reading what arrived is the one step that isn't automated.
- What came across — the counts, alongside how many addresses we found and how many of those we could read, so you can see how much of your site we actually got rather than a bare number with no denominator. A move from the WordPress plugin also counts Shop products, Teams and Fixtures.
- What we skipped — every address we found but didn't import, grouped by the reason. This list is the honest half of the report; a run that says "24 pages imported" and hides the seven it skipped isn't telling you anything useful.
- Worth checking before you publish — anything we imported that looks stale, such as a page your old site said it last changed years ago.
- What an import can and cannot do — the limits on this page, repeated on screen where you'll actually read them.
- Can't install plugins? Connect with an application password — for a WordPress site that won't let you add plugins. Enter your site's address and press Connect with WordPress. Once connected, it shows the site and the WordPress user it reads as, with a Disconnect button.
- Your old site's CSS, and a copy of this one — Check my old site's CSS, which reads the Additional CSS from your old WordPress site and shows what we'd keep, and Download your website (JSON), a copy of your ClubHelix site to keep.
- Earlier imports — every run you've done, so you can compare one against the next. There's a Stop this import button while a run is going and a re-run button once it's finished.
Step by step
Before you start
- Have the address of your current site to hand — the home page is enough, for example
https://www.yourclub.org.au. We work out the rest from there. - Check you're entitled to copy it. If someone else built the site and still holds the account, that's usually fine — the club's own words and photographs belong to the club — but the template it sits in belongs to your old provider, and we don't copy that.
- Leave your old site up. We read it over the public web, so switching it off before you import means there's nothing to read.
Prove you control the website
Do this once per website. Pick whichever of the four is easiest for you — any one of them is enough.
If the site is already your ClubHelix custom domain, there's nothing to do. You proved it when you connected the domain, and the panel will say so.
Add a tag to your home page. Copy the <meta> tag from the panel and paste it into your site's <head>. This is the same thing Google Search Console and Bing ask for, so your site almost certainly has a box for it already:
- WordPress — Yoast, Rank Math and SEOPress all have a "webmaster tools" or "header scripts" field. Any theme's
header.phpworks too. - Squarespace — Settings, then Advanced, then Code Injection, in the Header box.
- Wix — Settings, then Custom Code, added to the
<head>on all pages. - Anything else — anywhere in the
<head>of your home page.
Upload a file. Make a file called clubhelix-site-verification.txt containing just the code, and put it at /.well-known/clubhelix-site-verification.txt. Good if you can reach the files but not the theme.
Add a DNS record. Add the TXT record shown in the panel at your domain registrar. Slower — DNS can take a few minutes to an hour — but it's the one that works even if the old site is already switched off.
Before we give you a code we take one quick look at the address. If the site is already on ClubHelix — yours or another club's — we say so straight away, because there's nothing to move. A site that's switched off doesn't stop you getting a code — the DNS record works without it, and we'll try an archived copy of the site if the live one gives us nothing.
Then press Check now. If we find the code, the panel turns green and you can start. If we don't, it tells you where we looked, and you can try again as soon as you've made the change.
Start the import
- Paste the address into Your current website address.
- Tick the box: "This is our organisation's website. We own it or run it, and we are allowed to copy what is on it."
- Press Read my site. It runs in the background, so you can go and do something else — Theme or Branding are a good use of the wait.
Connect WordPress without the plugin
Use this if your WordPress site won't let you install plugins, for example a WordPress.com plan without plugins, or a site your web agency manages. It uses WordPress's own application passwords, so there's nothing to install.
- Sign in to your WordPress dashboard first. The connection reads as the WordPress user who approves it and sees what that user can see, so use an Administrator if you want your menus listed too.
- Under Can't install plugins? Connect with an application password, enter your site's full address, starting with
https://, and press Connect with WordPress. - WordPress asks you to approve ClubHelix. Approve it and you're brought back here with a one-line message saying whether it worked. Finish within 15 minutes, and come back signed in as the same ClubHelix admin who started.
- Run an import of that site as usual. It now reads your drafts, scheduled and private pages and posts as well as the published ones, and they all arrive here as drafts.
- To stop, press Disconnect. We also delete the password from your WordPress profile. If we can't reach your site to do that, the message asks you to delete ClubHelix under Application Passwords in your WordPress profile yourself.
While it runs
- The page updates as each stage finishes. A small club site is usually a few minutes; a large archive takes longer.
- We read your site's
robots.txtfirst and do what it asks, including any delay it requests. If it tells crawlers to stay out of a section, we stay out — even though you've told us the site is yours. - We identify ourselves, ask for one page at a time, and stop at a page limit for each run. Your old site will not notice us much.
- If you started it by mistake, cancel. Anything already written stays as drafts you can delete.
Read the drafts and publish
- Open Pages. Everything the import wrote is sitting there as a draft, in the review group, alongside anything else waiting for you.
- Read each one. A crawl carries your words across faithfully — including the committee list nobody has updated since 2019 and the "new" kit that arrived four seasons ago. Fix what's out of date before you publish, not after.
- Publish the ones you want. Publishing is what makes a page public; there's no separate approval step, and until you press it nobody outside your admin can see the page.
- Imported news posts land in News as drafts, each keeping the publication date your old site gave it — so your archive stays in the right order instead of arriving all dated today. Imported events land in Events as drafts too, with the dates they had on your old site, which means some of them are in the past.
- Imported news posts keep their categories and tags from a WordPress site. A ClubHelix post has one category, so the first becomes its category and any others become tags. Each category or tag is created once, however many posts use it, and you can tidy them up afterwards — see News.
- The photos we copied are in your Media library, ready to reuse on other pages. They arrive without descriptions, so add one to each photo you publish.
- Delete anything you don't want. You're not obliged to keep what we brought.
- If your old WordPress site ran in more than one language (Polylang or WPML), the version in your organisation's own language becomes the page, news post or event, and each other language is saved as a draft translation of it. The headline counts those translations and says how many there are, and each old address of a translation sends visitors to its original, where readers who use that language see the translation once you publish it. The banner over your admin says which drafts we copied from your old website and which we wrote from a starter layout.
What the WordPress plugin brings across
A move started from the ClubHelix plugin reads WordPress from the inside, so it brings across more than reading your address can.
- Teams. SportsPress teams arrive under Teams. If you already have a team with the same web address or name, we use it and only fill in a short name or logo it's missing. We never rename a team you already have, and we never change whether it's public. A new team stays hidden from your public site and is marked Imported — hidden until you make it public on the Teams page. Make each one public there before you publish the Imported fixtures competition, or its fixtures show without the team's name.
- Fixtures and results. SportsPress fixtures, with their scores, go into one competition called Imported fixtures. It's a draft and isn't public. Its season stretches to cover every fixture we brought, for example 2026–2027, and its sport is the one your SportsPress site was set to. Move the fixtures on, or publish the competition, under Competitions.
- Venues. A venue is matched to one of your Locations by name. If there's no match, we create the location as members only, so its address isn't on your public site until you choose to show it.
- Shop products. WooCommerce products arrive in your Shop as drafts, with their variants, such as sizes and colours. WooCommerce's own Shop, Cart, Checkout and My account pages are skipped, because your ClubHelix shop has its own.
- Translations. If your site uses Polylang or WPML, the copy in your organisation's own language becomes the page, news post or event. Each other language your site has switched on here is added as a draft translation of it (more than one site language is part of Pro). A language that isn't switched on, or that ClubHelix doesn't show on public sites yet, is skipped, and What we skipped says why.
- Players aren't copied. In ClubHelix a player is a member of your club, and member records hold personal details, so we don't create them from a SportsPress profile. What we skipped lists each player with the number of teams they were in, so you can add them as members and put them in their teams.
- Menus and forms come in a later update. For now they're listed as coming in a later update, not imported. Rebuild menus under Navigation and forms under Forms.
Bring members across from WordPress
If your old site is WordPress and keeps its members in a membership plugin (MemberPress, Paid Memberships Pro, Ultimate Member or WooCommerce Subscriptions), or simply as WordPress users, the ClubHelix plugin can bring those members across as part of the move. This isn't switched on for every organisation yet. When it is, a member section appears on the plugin's Migration tab.
- On the plugin's Migration tab, tick the member section. It stays off until you tick it. It shows how many members it found, by membership level and status, and lists exactly which details will be sent.
- Tick the statement that your club is allowed to share these details with ClubHelix, then start the move. Only an Admin can do this.
- Your members arrive on Members as roster entries without an account, keeping their membership type and paid-until date. No email is sent at import. Nobody hears from us until you choose to invite them. Marketing consent stays off unless your old plugin recorded that the person opted in, and no password comes across.
- On Members, Admins can see each imported person's email address, phone number and marketing preference. Moderators can't, and none of it appears on your public site or in the member directory.
- Cancel the old recurring subscriptions when you switch over. Bringing members across doesn't stop payments in your old plugin. Anyone on a recurring subscription there keeps being charged by it until you cancel it, so cancel those subscriptions in the old plugin at cut-over, or members could pay twice. The plugin and this page both tell you how many active recurring subscriptions they found.
Invite imported members to claim their account
- On Members, press Send claim invitations. Each imported member who hasn't claimed their account gets an email inviting them to claim it.
- Every invitation carries an unsubscribe link. Anyone who has unsubscribed from your club's emails is skipped, and the result tells you how many that was.
- Each press sends to a limited batch, so a big roster can take a few presses. You can invite someone again once a week has passed since their last invitation, and a link works for 21 days.
- To claim, the member follows the link, then signs up with a password or continues with Google. They must use the email address you invited: an account at any other address is turned away and the roster entry stays as it was, so a forwarded invitation can't hand someone's membership to another person. Their new account takes over the roster entry you imported, with the same membership type and paid-until date, so there's no duplicate to tidy up. Once a link has been used, nobody else can claim with it.
- If an imported address is wrong, or the member no longer uses it, open Correct address under it in the list, type the right address and press Save and send new invitation. The old link stops working at once and one new invitation goes to the corrected address. You can't use an address that already belongs to someone on your roster or has an invitation waiting, a member who has already claimed their account can't be changed here, and if the corrected address has unsubscribed from your club's emails it is saved but not emailed. Each member can be sent at most three invitations a day this way.
Bring your old CSS across
- If your old site runs on WordPress and you added your own CSS under Appearance → Customise → Additional CSS, press Check my old site's CSS. We read it from your old home page, which only works once you've proved you control the site.
- You'll see what we'd keep and every rule we'd leave out, each with the reason — for example, anything that loads another stylesheet, or pins something over the whole page.
- Press Apply as my custom CSS to use it. That button only appears if your plan includes custom CSS and your site has none of its own yet. We never replace custom CSS you've already written; copy what you want into Theme → Custom CSS instead.
Download a copy of your website
- Press Download your website (JSON). You get one file with your pages and their sections, your theme, custom CSS, menus, categories and tags, news, events and a list of your images.
- It holds no member details. Email addresses and phone numbers stored in page sections are removed, so a contact block needs them added again if you use the file somewhere else. Words you typed into a paragraph are exported as written.
- The image files themselves aren't inside it — the list gives each image's address. Admins and moderators can download it a few times an hour.
Run it again
- You can run an import against the same site more than once — after you've fixed something on the old site, say, or after a run was cut short.
- A second run updates what the first one created rather than making a duplicate set. A page you deleted after the first run is left alone the second time, so deleting something is a decision we respect rather than one we undo.
Field reference
| Field / column | What it means |
|---|---|
| Your current website address | The public address of your existing site. Must be reachable over the open internet. |
| Ownership confirmation | Your statement that the organisation owns or controls that website. Recorded with your name and the time. |
| Addresses found | How many pages we could see on your site, from its sitemap and its own links. |
| Pages read | How many of those we successfully downloaded. |
| Pages drafted / News imported / Events imported | What was written into your ClubHelix site. All of it as drafts. |
| Shop products / Teams / Fixtures | Moves from the WordPress plugin only: products drafted in your shop, teams created or matched, and fixtures added to the Imported fixtures competition. |
| Images copied / Images we couldn't copy | Photos now hosted by ClubHelix on your own site, and the ones we couldn't fetch. |
| Old links kept working | Addresses from your old site that now send visitors to the right page here. Redirects is where you read and correct them. |
| Skipped | Addresses we found but didn't import. Every one of them carries a reason from the list below. |
The reasons a page is skipped, exactly as they appear on the page:
| Reason shown | What to do about it |
|---|---|
| Your site's robots.txt asked crawlers not to read this page | Change that file on your old site if the rule is out of date, then run the import again |
| Not a web page (a file, a feed or an image) | Nothing — this is us skipping something that isn't a page |
| The page was larger than we will download | Rebuild it here by hand, or split it up on the old site first |
| We could not reach the page | Check the page still loads for you, then run the import again |
| The page returned an error | Same — a broken page on the old site is a broken page |
| The address pointed somewhere we will not fetch from | We refuse addresses that aren't on the open internet. Nothing for you to fix |
| The address was on a different site | We only import from the site you named |
| The same page had already been imported in this run | Nothing — two addresses led to one page |
| There was no content left once we had converted the page | The page was all layout and no words. Rebuild it here |
| The page builds itself in the browser, so we could not read its text | See the FAQ below — copy and paste is the answer for now |
| We reached the limit for this run before getting to this page | Run the import again to continue |
| You deleted what we imported from this page last time, so we left it alone | Nothing — we're respecting your decision |
| Something is already at that address on your new site, as a published page or a draft | Rename or delete the existing page, then run the import again |
| We could not work out enough about this page to import it | Rebuild it here by hand |
| We could not save this page | Try the import again; if it keeps happening, tell us |
| That address was not an image we can use | Nothing — we skip anything that isn't a usable picture |
| We reached the image but could not save it to your site | Upload that photo yourself, or run the import again |
| We can't bring this kind of content across yet (for example menus, fixtures, teams, players or products) | Nothing to fix. Your menus show here too when you've connected with an application password: rebuild them under Navigation |
Tips & FAQ
We can't find the code. Four things catch most people. The change may not be live yet — open your home page, view source, and search for clubhelix-site-verification; if it isn't there, the change hasn't published. A caching plugin or CDN may still be serving the old page, so clear the cache and try again. If you used DNS, give it up to an hour. And check you copied the whole code, with no spaces either side.
Can I use a page other than the home page? For the tag, no — we read the home page, because a code on a page we were pointed at could be echoed back by a site that reflects what's in the address. The file and the DNS record don't have this problem.
Do I have to leave the code there? Once we've found it, yes ideally, but nothing breaks if you tidy it away later. We don't re-check.
What if we've lost the domain? If the old site is gone but you still own the domain, use the DNS record — it works with no site at all. If you've lost the domain too, none of the four can work; contact us and we'll sort it out with you.
Our import says it's paused. That means it was queued before the website was verified — including an address you gave us when you signed up. Verify it and the import picks up where it left off — you don't need to start again.
It says the website is already on ClubHelix. We look at the site before we give you a code, and that one is already served by ClubHelix, so there's nothing older to copy. If it's your club's site, it's already in your organisation's admin. If you signed up again by mistake, you don't need a second organisation.
- The page says "Coming soon". Migration is part of ClubHelix but hasn't been released to every organisation yet, so its admin page shows a preview you can look at but not use. It unlocks by itself the moment it launches — there's nothing for you to set up.
- Moving from WordPress with the plugin, and the start forms are missing? While the move is in pilot, a club using the ClubHelix WordPress plugin may see only its plugin runs here, ready to review, with reading a website and uploading an export file not available yet. Start the move from the plugin in your WordPress dashboard. Pressing Cancel the move in the plugin, or Stop this import here, now stops the run on ClubHelix as well.
- Everything really does arrive as a draft. Not "mostly", not "except the home page", and that includes a new team brought across by the WordPress plugin, which stays hidden until you make it public. Until you publish a page it isn't on your public site, isn't in your menus and isn't in your sitemap, so a search engine can't find it either. Take as long as you like reading it.
- A website address can't bring members across. Your roster lives behind a login on your old system, and no amount of reading the public site will produce it. If your old site is WordPress, the ClubHelix plugin can bring members across once that's switched on for your organisation — see Bring members across from WordPress under Step by step. Otherwise, moving members means an export file from your old provider — Bulk import is the page for that, and it's a separate job from this one.
- Why didn't our imported members get an email? Bringing members across never emails anyone. They hear from you only when you press Send claim invitations on Members, and anyone who has unsubscribed from your club's emails is left out.
- How do imported members claim their account? An Admin presses Send claim invitations on Members. Each press sends to a limited batch, every email carries an unsubscribe link, and you can invite someone again a week after their last invitation. The link works for 21 days. The member follows it and signs up with a password or continues with Google, using the address you invited, and their account takes over the roster entry you imported, with the same membership type and paid-until date. Someone signed in at a different address is told the invitation was sent to another address, and nothing changes. If a member no longer uses the address you imported, open Correct address beside them on Members, enter the address they use now and press Save and send new invitation: the old link stops working and a fresh one goes to the new address. Once a link has been used, anyone else who opens it is told it's already been claimed.
- Cancel old recurring subscriptions when you switch over. Bringing members across doesn't stop your old WordPress plugin charging them. Cancel active recurring subscriptions there at cut-over, or members could pay twice.
- Card details, direct-debit mandates and passwords never transfer. Not between us and your old provider, and not between any two platforms. Members who pay you automatically will need to set that up again here, and everyone signs in with a new ClubHelix password. Anyone who tells you otherwise is describing something that isn't allowed to happen.
- Some pages build themselves in the browser. If your old site paints its words in with JavaScript after the page loads, there's nothing in the file we download for us to read — so we record the page as one we couldn't read rather than importing a blank one. Copy and paste is the honest answer for those; there usually aren't many.
- We don't crawl Facebook. Reading a Facebook Page the way we read a website breaks their terms and runs into consent walls, so an import never does it. There is a separate Facebook Page connect on the Integrations page, where you sign in to Facebook and choose a Page you administer — it brings posts, photos and your About text across as drafts, one time, and never posts anything back. It's part of the same unreleased site-migration feature, so it isn't switched on yet either. Until it is, expect to move the good bits by hand.
- Some images still point at your old site. Where we could fetch a photo, we've stored our own copy and your page uses that. Where we couldn't, the page keeps pointing at the copy on your old site — which looks fine while that site is up, and breaks the day it goes off. The page tells you how many wouldn't copy, so before you switch your old site off, find those images on your published pages and upload them yourself.
- Can I upload a WordPress export file instead? Yes. In WordPress, go to Tools → Export, choose “All content”, and upload the file under Have a WordPress export file? Upload it instead — it brings each page's exact title, date and categories across. You still prove you control the website the file came from, the same as for an address.
- What does the WordPress plugin bring that an address can't? SportsPress teams and fixtures with results (in a draft, non-public Imported fixtures competition), venues as locations, WooCommerce products as drafts, and Polylang or WPML translations as draft translations. Players aren't copied, because they're personal records, and menus and forms come in a later update.
- What does the application-password connection do? It only reads your site, for the move. Drafts and private pages come across as drafts, and your menus are listed under What we skipped, because menus can't be imported yet. It can't bring blocks across, keep the two sites in sync or send visitors from your old addresses to ClubHelix. The plugin does those. If WordPress stops accepting the password (you deleted it from your profile, say), the next import reads your public pages exactly as before.
- "Something is already at that address". It can be a published page or a draft — a page you have not published yet still holds its address. Your new site starts with a few pages of its own — a home page, and usually About and Contact — and those are exactly the addresses an imported site wants too. Rename or delete the existing one, then run the import again.
- The import brought across something out of date. That's a faithful copy doing its job. A crawl can tell what your old site says; it can't tell whether it's still true. This is the main reason everything waits as a draft.
- We got hardly anything. Some sites are built in ways a reader can't get much out of. Tell us the address and we'll have a look — there's often a better route in, such as an export file from your old provider.
- What about my old web addresses? They're handled on Redirects, the screen next to this one. As the import runs it records where each old address should now land, so a bookmark or a search result reaches the right page instead of a "not found". Read that list — especially the addresses it couldn't match — before you point your domain at us under Domains. If a page arrives before its parent page, we move it under the parent and its old address gets one redirect straight to where it now lives, never a chain. A redirect you've corrected yourself is never overwritten by a later run.
Once your drafts are published, tidy up the rest of your site under Pages, Navigation and Theme. For an overview of all admin tools, see the Admin overview.