Give your WordPress site its first task.
Connect the site you already have, add your agent to Slack or Telegram, and tell it what you need.
Connect your siteStart with 500 free credits. No credit card needed.
Enabling WordPress Multisite takes five steps and about ten minutes. What takes the afternoon is the part nobody writes down: DNS, web server config, wp-config constants and rewrite rules all have to agree, and when they do not, the symptoms point somewhere other than the cause. This is the install sequence, the decisions that come before it, and the order to check things in when a subsite returns a 404.
Enabling Multisite is one line in wp-config.php, one form in Tools, and two blocks of generated code. Most people get through it in ten minutes. Then the second subsite returns a 404, the admin loops back to the login screen, and the same ten-minute job turns into a day.
That gap is the whole subject. Multisite spans four layers that have to agree with each other: DNS, web server configuration, WordPress constants, and plugin behaviour. Nearly every reported failure is a disagreement between two of them, not a bug in WordPress.
It multiplies ordinary problems, too. One network-activated plugin that was never written for a network takes every subsite down at once, so the routine for a plugin that is not working applies across the whole install rather than one site. That is worth knowing before you enable anything.
WordPress’s own Advanced Administration Handbook opens its multisite preparation page with the question “Do you really need a network?” before it gets to any requirements. That order is deliberate.
Multisite fits sites that belong to the same organisation and share a stack: franchise locations, university departments, regional or language variants of one brand, an internal publishing group, a set of microsites built from the same base theme. One codebase, one update cycle, one hosting bill, shared users where you want them shared.
It fits badly when the sites are unrelated. The most common regret in practitioner threads is an agency that put a portfolio of unconnected client sites into one network for the convenience of a single dashboard. Shared convenience is shared fate: one compromise, one bad update, one runaway cron job, and everything is affected. Per-site experimentation gets awkward, and offboarding a client means extracting a subsite from the network, which is possible but not quick.
Two alternatives come up repeatedly and both are reasonable. Separate installs with a management tool across them gives you most of the single-dashboard benefit without coupling anything at the database level. Multi-tenant setups, where one codebase serves isolated sites without WordPress’s network tables, are a different answer to the same cost problem. Neither is Multisite, and neither carries its lock-in.
A short filter: if the sites will share users, themes and governance for years, Multisite earns its place. If any one site must be able to fail, move host or leave on its own, use separate installs.
Most failed installs are host capability problems that surface halfway through. Check these first, because finding out afterwards means unwinding a half-configured network.
mod_rewrite has to be enabled or the .htaccess rules are ignored silently. On nginx there is no .htaccess at all and the rules belong in the server block, which means you need either server access or a host that applies them for you.wp-config.php and .htaccess. If the files cannot be saved, the network looks installed and keeps behaving like a single site.wp-content/uploads/sites/. Wrong ownership produces “Could not create directory” on the first media upload.Budget shared hosting is where this list gets expensive. Some plans do not expose wildcard subdomains, some do not let you touch rewrite configuration, and a few managed hosts either do not support Multisite or support it with limits on domain mapping. If your host treats server rewrites or wildcard DNS as a special case, that is the answer about whether Multisite is a first-class workload there.
Network Setup asks you to choose, and the choice is not cosmetic. It determines routing, cookie handling, certificate coverage and how domain mapping will work later. You cannot flip it afterwards with a config edit: changing structure after launch breaks URLs and internal links, and the honest path is a controlled migration.
Subdirectories (example.com/paris/) are the lower-friction option. No wildcard DNS, cookies are simpler to reason about, and your existing certificate covers everything. They suit sites that are genuinely one brand: regional sections, departments, campaign hubs.
Subdomains (paris.example.com) suit sites that need visible separation or will eventually run on their own domains. They need a *.example.com record pointing at the server, a web server configured to answer wildcard hostnames, and a wildcard certificate, which usually means DNS-based validation rather than the click-through flow you used on the single site. Trying to fake subdomain routing with rewrite tricks instead of fixing DNS is a reliable way to lose a day.
One thing that surprises people testing locally: if the site runs on localhost, on an IP address, or on a URL that already contains a path, Network Setup only offers subdirectories.
The handbook’s Create A Network article walks the same sequence every host guide repeats, from Step 0 “Before You Begin” through Step 6 “Administration”. Here it is with the parts that actually bite.
wp-config.php and .htaccess outside the site.wp-config.php, above the /* That's all, stop editing! Happy publishing. */ line and not inside any if block or function:
define( 'WP_ALLOW_MULTISITE', true );
If that comment does not exist in your file, put it above the first require or include. Placed below it, or inside a conditional, Tools > Network Setup never appears.wp-config.php and .htaccess. Do not tidy them, do not adapt a version from a tutorial, and do not merge the .htaccess block with your old rules.
On a subdirectory network the generated constants look like this, with your own domain in place:
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
define( 'DOMAIN_CURRENT_SITE', 'example.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
A subdomain network gets the same constants with SUBDOMAIN_INSTALL set to true. DOMAIN_CURRENT_SITE has to match the primary site URL exactly, with no trailing slash and with www. present or absent exactly as the site runs. If you see COOKIE_DOMAIN suggested in a tutorial, leave it out unless you have a tested reason; copied cookie settings cause a lot of avoidable login trouble.
The Apache block for a subdirectory network replaces the entire existing WordPress section of .htaccess:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
Before you create real sites, confirm all of this:
wp-content/uploads/sites/2/.
If something looks off, do not re-run Network Setup repeatedly hoping for a different outcome. By then WordPress has written constants and database records; re-running on top of a partly configured install adds duplicates to untangle.
The single most useful habit here is changing one layer at a time, from the outside in. Practitioners converge on the same order, for the same reason: each step’s result is then readable.
mod_rewrite or the nginx equivalent, writable config files, PHP version and memory.SUBDOMAIN_INSTALL in particular.Two symptoms tell you which layer you are in without any guessing. If a broken subsite shows your host’s branded 404 page, the request never reached WordPress, so the problem is DNS or server routing. If it shows your theme’s 404 page, WordPress answered and the problem is rewrite rules or constants.
Every subsite 404s, the main site is fine. Rewrite rules. Usually someone merged the new network block into the old single-site rules instead of replacing the WordPress section outright. Re-copy the block from Tools > Network Setup, replace the whole section, flush permalinks.
Subsites load the main site’s content, or core assets 404 with a subdirectory in the path like /site1/wp-includes/js/jquery.js. Constants. Check DOMAIN_CURRENT_SITE and PATH_CURRENT_SITE against the real primary URL, confirm SUBDOMAIN_INSTALL matches the structure the rewrite rules describe, delete any duplicate definitions, then flush permalinks.
White screen or a 500 straight after saving wp-config.php. PHP syntax, almost always: a missing semicolon or smart quotes from a copy and paste. Nothing renders and the error is in the log, not on screen.
Network Setup never appeared. The constant is below the stop-editing comment, inside a conditional, or the file never saved because the host would not write it.
Subdomains do not resolve at all. Missing wildcard DNS, a server that is not configured for wildcard hosts, or a certificate that covers the apex domain and nothing else.
Network problems are unusually good at pointing at the wrong cause, and the fix often sits in files you reach over SSH rather than in the dashboard. If you would rather hand that over, SiteSelf fixes WordPress errors on request: you describe the symptom in chat, the agent works on the live site, and it reports what it changed and what it checked.
In Multisite, only the Network Administrator installs plugins and themes. A beginner on r/WordPress who selected Multisite during setup by mistake reported the giveaway clearly: there was no Add Plugin button on the site they were working in. They removed the network and reinstalled.
Installation and activation are separate. A plugin is installed once at network level, then either network-activated across every site or made available for per-site activation. Those are different states, and several plugins built for networks, including WP Multi Network by John James Jacoby, which turns one Multisite installation into several networks, only work correctly when they are network-activated. Activating them per site produces partial behaviour that is hard to read.

Keep network activation for things every site genuinely needs. Themes work the same way: Network Admin decides what is available, each subsite picks from that list, and the shared stack is the point. Note that the Theme File Editor is restricted in a network by default, which changes how you edit theme files safely.
If you write custom code for the network, two habits save later pain. Guard multisite-only calls such as switch_to_blog() with is_multisite() so the code does not fatal if it ever runs on a single site. And use home_url() or site_url() in templates rather than hard-coded domains, so mapped domains and per-site URLs resolve correctly.
Three things people expect to be built in and are not: cross-subsite user access (adding a user to the network does not give them access to every site), search across all sites in the network, and pulling one subsite out into its own install. All three need plugins or custom work.
A Multisite moves as one piece. Site-by-site migration is where these projects die, because shared user tables, per-site media directories, network-level plugins and domain values stored in both the database and the config files all have to land together.
When you fix URLs after a move, WP-CLI’s wp search-replace searches through all rows in a selection of tables and replaces the first string with the second. Run it with the network flag so it covers every subsite, and skip the guid column, because rewriting GUIDs causes more trouble than it solves. If tables come out corrupted, wp db repair first, restore from backup if errors persist, and check wp_blogs and wp_site for duplicate entries.
Not by editing constants. Flipping SUBDOMAIN_INSTALL and the rewrite rules on a live network breaks URLs, routing and internal links. Treat it as a planned migration with search-replace and redirects, and decide the structure deliberately before launch instead.
No. Super Admins see everything; a normal user added to the network still needs a role on each site they should reach. Granting broader access across subsites generally takes a role and capability plugin or custom logic, which catches people out when they assume shared users means shared access.
Yes. Each subsite gets its own storefront, products and orders while sharing one codebase and one update cycle. The caveats are host support for Multisite and domain mapping, extensions that are network-aware, and resource use, since checkout traffic on one store shares the server with every other site.
A network can be reverted to a single site, and extracting one subsite into its own install is possible: export the content, migrate the relevant tables, fix URLs. Neither is quick, and both are easier if you planned the exit before you built the network.
Idle subsites do not each consume the memory of a standalone install. It is one codebase, and a request loads one site. What does cost you is network-activated plugins running everywhere and a database that carries per-site tables for every subsite you create.
It depends on the stack more than on Multisite. With persistent object caching, page caching and a plugin set chosen with care, the difference is small. Dozens of subsites with heavy plugin stacks on an underpowered server is a different story, and that is where most complaints come from.
How-to Tutorials
Changing the footer in WordPress is rarely hard. Finding which layer controls it is, because block themes, classic themes, page builders and theme files can each own the same strip of text. Work out which one is rendering your footer first, then edit only in that place.
Read article ›How-to Tutorials
There is no single way to edit a WordPress theme. There are three layers, and picking the wrong one is why edits vanish after an update or take the site down. This is how to tell which layer a change belongs in, and how to make it there.
Read article ›How-to Tutorials
WordPress has no landing page object. A landing page is an ordinary Page, and what makes it behave like a landing page is the template that renders it, its slug, its indexing settings and what loads on it. Get those four right and the page is fast and findable; get one wrong and the page goes blank, 404s, or quietly stops collecting leads.
Read article ›Connect the site you already have, add your agent to Slack or Telegram, and tell it what you need.
Connect your siteStart with 500 free credits. No credit card needed.