Shared hosting plans are sold on storage and bandwidth. Fair enough. Most small sites never come close to either. The limits that actually bite you are buried in the fine print: inodes, CPU seconds, concurrent processes, email send caps, and database size ceilings.
We see this pattern a lot. Traffic is modest. Page views are fine. Then the site starts throwing 503 errors, backups fail, or mail stops delivering. The owner assumes they need a bigger plan for visitors. Often they need a plan that handles how the site is built, not how popular it is.
Inodes: the limit nobody reads
An inode is basically a file slot on the server. Every image, plugin file, cache fragment, and log line counts. A WordPress site with a heavy backup plugin, multiple caching layers, and years of uploaded media can sit under 2 GB of disk and still blow past a 250,000 inode cap.
Symptoms look random: cannot upload new media, backup jobs fail halfway, cPanel shows disk space available but errors say quota exceeded. The fix is not always delete everything. Sometimes it is fewer plugins writing thousands of tiny cache files, or moving backups off the account entirely.
Before you sign a renewal, ask what the inode limit is and whether it is hard or soft. Soft limits get warnings. Hard limits break production at the worst time.
CPU and entry processes
Shared hosting shares CPU time across accounts on the same machine. A cron job, a misbehaving plugin, or a brute-force login wave can spike your usage even when nobody is browsing the homepage.
Entry process limits cap how many PHP requests or shell scripts can run at once. WooCommerce checkout plus a backup cron plus a stuck admin tab can hit that ceiling fast. Users see a white screen or a generic error. You see nothing in Google Analytics because the request never finished.
Classic triggers we see on Canadian business sites:
- Scheduled imports or sync plugins firing every minute
- Page builders regenerating CSS on every admin save
- Security plugins scanning the whole uploads folder nightly
- Contact forms posting to broken webhooks in a retry loop
Fix the job first. Upgrading the plan without fixing a runaway cron buys you a week, not a year.
Email sending limits
Shared plans almost always cap outbound mail per hour. That is reasonable. Spammers love cheap hosting. The problem is legitimate sites hit the cap too: WooCommerce order emails, form notifications, newsletter plugins, and password resets all count.
If customers stop getting receipts but the site loads fine, check the host's mail queue and sending limits before you debug WooCommerce for three days. Transactional mail often belongs on a proper SMTP relay or dedicated sending service, not raw PHP mail() from a crowded shared IP.
Database size and query load
A 500 MB database limit sounds huge until post revisions, session tables, and analytics plugins balloon wp_options. Slow queries from missing indexes hurt everyone on the shared node, so hosts throttle or flag accounts that hammer MySQL.
Autoloaded options in WordPress are a common silent killer. One plugin storing megabytes of JSON in autoload=yes rows makes every page hit expensive. Clean the data or move to an environment where you control MySQL tuning.
What "unlimited" usually means
Unlimited storage rarely means unlimited inodes. Unlimited bandwidth still has fair-use language. Unlimited websites might mean unlimited addon domains pointing at the same cramped account.
Read the acceptable use policy the way you read an SLA: look for numbers, not adjectives. If the host cannot quote inode, CPU, and email limits clearly, assume you will discover them during a launch week.
Signs you have outgrown shared (without high traffic)
- Frequent 503 or 508 errors with low visitor counts
- Backups failing for quota reasons despite "plenty" of disk
- Mail delivery problems tied to hourly send caps
- Need for custom PHP extensions, long-running workers, or Redis
- Compliance or client contracts requiring isolated resources
That is a different conversation than shared vs VPS for traffic growth. You can outgrow shared on a quiet site because of architecture, not fame.
What to do before you panic-upgrade
Audit cron schedules. Delete stale backup copies on the account. Check inode usage in cPanel or ask support for a breakdown. Review plugins that write cache or log files aggressively. Move outbound mail to SMTP with a reputable provider.
If the site is healthy after cleanup and still hits limits weekly, a VPS or managed plan with dedicated resources is cheaper than paying developers to band-aid a shared account every month.
Bottom line
Shared hosting limits show up in files, CPU, mail, and database behavior long before your traffic chart looks impressive. Know your inode and process caps, fix runaway jobs, and treat "unlimited" marketing as a prompt to ask better questions.
Hitting weird quota errors on a quiet site? Talk with Swift Host. We can read the account signals with you and tell you honestly whether cleanup is enough or it is time to move up.