One name for the game

Two abandoned websites, 1,104 redirects, and a launch day with numbers

M.A.G.U.S. Kártya is a Hungarian collectible card game that has been played since 1997. Until this August it had two websites, and neither was maintained: the first had been abandoned for years, the second had been losing images for a while and did not work on phones. This post is about the decisions that turned them into one site, not about the migration scripts. The community those sites serve is the same one that plays on my side project, maguskartya.app: a virtual tabletop, an online table where players meet each other with their own decks, plus a machine opponent for newcomers that plays by heuristics on a reduced card pool. The two sites are connected at the end.

What was there

The publisher’s portal went online in 2004 and published its last article in 2021. It holds 1,984 articles, 1.49 million words by 36 authors. Its catalogue of expansions stops years before the current ones. It also serves every article page cut off after its title, because the theme’s comment counter queries a database that no longer exists. I had admin access, and the other admins confirmed what the pages showed: nobody was maintaining it.

The fan team’s WordPress site took over in 2021. It had the current content: 73 pages, 470 posts, 523 tournament dates, 2.7 GB of images. It also had a domain named after the team rather than the game; forty expansions buried three menu levels deep, with a whole decade of releases missing from the list; not one card image with alt text, the description a screen reader or a search engine uses instead of the picture; and 4,307 images hotlinked, embedded straight from other people’s servers, about half of them from servers that had since disappeared. At some point the hosting quota ran out, a cleanup nobody could reconstruct afterwards deleted a large share of the uploaded images, and pages loaded with holes.

An article page on the 2004 portal: below the title, a PHP warning and WordPress's database-connection error stand where the article body should be.
An article page on the publisher’s portal, a post from October 2018. The body is gone; in its place, the database error. Hungarian UI: “Hiba az adatbázis-kapcsolat létrehozása során” means “Error establishing a database connection”. Database user and server path redacted.

None of that is unusual for a volunteer-run site of a small community. The unusual part was treating it as one product to build instead of two sites to repair.

Four decisions before any code

The name is the product. The new domain is maguskartya.hu, the game’s name. The team’s name, Fekete Határ Szindikátusa, is one paragraph on the About page. A search for the game should land on the game, and a newcomer should not have to learn who the syndicate is before finding the rules. The site also uses the same colour palette as the online table, so the two read as one family.

Keep everything, edit nothing written by people. Both sites’ content moved: every article back to 2004, every tournament date, 6,862 card records, and 69 product pages, one for every release since 1997, including the decade that neither old site listed. The 2004 portal’s articles came through its RSS feed, because its API was closed. Article text lost its formatting debris and nothing else. Factual errors on the rules pages were corrected, and each correction was written down. Every image now lives on the site’s own host, converted to WebP, a compact image format: 2.7 GB became 516 MB with no loss of resolution.

The catalogue is data; WordPress only renders it. A release has cards. A card has a record with its printed number, its name, its rarity and a few flags. A tournament format lists the releases it allows, plus its bans and restrictions. An ultra card belongs to a release like any other card. All of it lives as JSON files in a git repository, one folder per release, one record per card next to its image. No product page or format page is edited by hand: a script reads the repository and regenerates all 69 product pages, the format pages and the media library, and a format’s legal card pool is computed on every run instead of being stored anywhere. Hiding a card is one flag. Moving a release out of a format is one line. Either is followed by one run and one check. A page with three hundred images is not something a volunteer should edit in a browser. Two things came free with this: every product page lists its card names as text, which is what a search engine reads, and if the community ever outgrows WordPress, the data is already in the shape a purpose-built site would need. It cost a set of scripts, not custom software.

The files follow the same rule. On the old site one card sat in the media library as cc_phet_lehelet, cc_phet_lehelete and cc_phet_lehellete, next to files called image_234 or named after a print-sheet page number. An author who could not find a card uploaded it again, so duplicates piled up and ate storage. The same card is now one file, 3545-phet_lehelete-400x561.webp: catalogue number, printed name, pixel size. It carries the card’s name as alt text, is served in several sizes at a higher resolution than before, and sits in a media-library collection named after its release, Ősök ébredése, so an author finds it by number or by a fragment of the name. The untouched scans stay in the repository; the site itself never needs them.

Two entrances and a calendar. The old site served the active player well and nobody else. The new one opens with two pages, one for “I am new” and one for “I played years ago”, and both end at the tournament calendar, because the question a newcomer actually has is where they can play. The calendar answers it from data: about two events a week over the last twelve months, half of them in Budapest.

The redirect I refused, then measured

A 301 is a permanent redirect: the old address answers “this moved here”, and browsers and search engines follow. On August 9 I decided not to build one. The reasoning was that this was a new site, not a moved one. The old site would stay on its own domain, so old links would keep working there, and a deep link would have no matching page on the new site anyway.

On August 27 I compared the two sitemaps, the URL lists each site publishes for search engines. 466 of the 475 old article addresses mapped onto a new one with a single rule, a /cikkek/ prefix. The premise held for the pages and failed for 98% of the content. The decision reversed the same day. One number was enough, and the argument before it had rested on an assumption nobody had checked.

The audit that found 247 hidden 404s

The redirect rules were tested first on a spare subdomain against the old sitemap: 550 URLs, 550 landed on a live page, 511 on the exact target. That looked finished.

The day before the switch I simulated every URL I could find on the old site, not only the ones in the sitemap: 1,104 addresses, run through the rules in order and checked against both sites’ live data. 822 landed on target, 35 on the home page, and 247 would have ended in a 404. The cause was the events plugin’s sitemap, which lists only future events, so 244 of the 528 past tournament pages had been invisible to the first audit. After a second pass: 1,102 on target, two intentional home-page fallbacks, zero 404s, 339 rules.

One rule sits above all the others and does nothing visible. It exempts the certificate renewal path. A redirect is sent after the encrypted connection is set up, so the old domain needs a valid certificate for as long as the redirect exists. Without the exception, renewal would fail silently, and every old link would turn into a browser warning some months later.

Launch day

The new site had been live on its own domain for four days. The switch itself was one setting on the hosting panel, on a Sunday: the old domain now points at a folder that holds nothing but the redirect rules. A Facebook post in the community group announced it the same day.

The site measures with PostHog, a product-analytics tool, in cookieless mode: nothing is stored on the visitor’s device, so there is no consent banner. The same PostHog project measures the online table, split by host, and the links between the two carry source tags in both directions.

  • Launch day: 1,889 page views, 405 visitors. The next three days: 262, 157 and 146 visitors.
  • Where they came from on day one: Facebook 166, direct 175, Google 22. Seventeen arrived with the old domain as referrer: tabs still open on the old site, clicking through the 301.
  • 42% of page views so far came from phones. The old site was not built for them. The new card grid is three columns on a phone and nine on a wide screen, and the calendar turns into a list.
  • The two entrance pages were read by 86 and 56 people in four days.

The maguskartya.hu home page on a phone: the site title, a box asking whether the visitor is new to the game with two buttons, the banner of the newest release, and the latest article.
The home page on a phone. Hungarian UI: “Most ismerkedsz a játékkal?” asks whether the visitor is new to the game; the two buttons are “I would play for the first time” and “I played years ago”. Below them, the newest release and the latest article.

The loop to the online table ran in one direction. 65 visitors went from the portal to the table in the first four days, 36 of them straight to the machine opponent. Bot matches started per day had been between one and five for three weeks; on launch day there were 30, and 23 of them were started by people who had come from the portal. Two registrations in the first 48 hours carried the portal’s tag. The other direction was quiet: nine clicks from the table back to the portal in a week. That number is small, and it stays in the post.

What it cost, and what stays reversible

Five weeks from the first inventory to the switch. The hosting is the shared plan the old site already ran on, paid a year ahead at about the price of a managed WordPress plan, with room for both sites. The old WordPress stays there, 10.6 GB of it, with no domain pointing at it: an inert archive, one panel setting away from being served again on its own domain. Google Search Console has the change of address. Nothing in the sequence was irreversible, and that was the condition for doing the switch on a Sunday.

Three things I would keep for any migration of this shape: measure the premise before deciding, because the “no redirect” decision had a number hiding behind it; treat a sitemap as a sample, not an inventory; and leave the old system in place until the new one has earned its traffic.

Leave a comment