Adbell Blog Network
A self-hosted PHP multi-site AI blog platform. Run unlimited niche blogs from one codebase, automate content with Claude AI, and monetise with Google Ad Manager or AdSense.
What's Included
Requirements
Installation
Step 1 — Create Database
In cPanel → MySQL Databases:
- Create Database
e.g.
youraccount_blog - Create Database User
Use a strong password
- Assign User to Database
Select All Privileges
Step 2 — Upload Files
Upload all files to your domain root. Enable "show hidden files" in your FTP client to ensure .htaccess is uploaded.
Step 3 — Run the Installer
Visit https://yourdomain.com/setup.php in your browser and follow the 5-step wizard:
- Requirements Check
Automatically verifies PHP version, extensions, and folder permissions
- Database Configuration
Enter your DB host, name, username and password — tables are created automatically
- Create Admin Account
Set your username, email, and password for the admin panel
- First Site Setup
Enter your domain, brand name, niche, and choose a theme
- Complete
Installer self-deletes and redirects to admin panel
setup.php manually from your server immediately after installation.Configuration
The installer creates core/db.config.php automatically. Add your API keys to it:
// core/db.config.php
define('DB_HOST', 'localhost');
define('DB_NAME', 'your_database');
define('DB_USER', 'your_username');
define('DB_PASS', 'your_password');
// AI Content Generation — get at console.anthropic.com
define('AB_CLAUDE_KEY', 'sk-ant-api03-...');
// Images API — optional, free at pexels.com/api
define('AB_PEXELS_KEY', 'your-pexels-key');
// Your license key — from purchase email
define('ABN_LICENSE', 'ABN-A-XXXX-XXXX-XXXX');
Admin Panel
Access the admin panel at https://yourdomain.com/admin/
The admin auto-detects which domain you're accessing it from and pre-selects the correct site. All management is done through the admin — no database editing required.
| Section | What It Does |
|---|---|
| Dashboard | Overview stats — posts, queue, views, leads, revenue estimate |
| Write Post | HTML editor with live preview, SEO fields, image upload |
| All Posts | List, edit, publish/draft toggle, delete |
| Static Pages | Create About, Privacy, Contact pages with full editor |
| AI Queue | Add topics, monitor generation status, retry failed |
| Keywords | Keyword bank — auto-picked by cron when queue is empty |
| Categories | Create and manage post categories |
| Ad Zones | Configure 10 predefined ad placements |
| Email Leads | View subscribers, export CSV |
| Cron / Auto | Cron URL, cPanel guide, queue status |
| Settings | API keys, Brevo, ads.txt, robots.txt per domain |
| All Sites | Add/edit sites, switch themes, manage multiple domains |
Managing Sites
Admin → All Sites → Add New Site. Each site needs:
- Domain — without www, e.g.
myblog.com - Brand Name — shown in header and emails
- Niche — used to guide AI content tone
- Theme — select from installed themes
Posts & Editor
Admin → Write Post. The editor has four tabs:
- Write — HTML editor. Use standard tags:
<h2><h3><p><ul><strong> - Preview — live rendered preview
- SEO — meta title (50–60 chars), meta description (140–155 chars), focus keyword, excerpt
- Image — upload featured image or paste URL
<html>, <head>, <body>, <style>, or <script> tags in post content — they break page layout.AI Queue & Automation
How It Works
- Add Topics
Admin → AI Queue → paste topics one per line
- Set Up Cron
cPanel cron hits
generate.phpon a schedule - AI Generates
Claude API writes full article with title, meta, content, image, and schema
- Auto-Published
Post appears live on site immediately
Cron Setup
In cPanel → Cron Jobs, add:
# Every 4 hours — 3 posts per run (~18 posts/day)
0 */4 * * * curl -s "https://yourdomain.com/generate.php?site=1&limit=3" >> /dev/null 2>&1
| Frequency | Schedule | Posts/Day | Claude Cost |
|---|---|---|---|
| Every hour | 0 * * * * | ~72 | ~$2.40/day |
| Every 3h | 0 */3 * * * | ~24 | ~$0.80/day |
| Every 4h | 0 */4 * * * | ~18 | ~$0.60/day |
| Every 6h | 0 */6 * * * | ~12 | ~$0.40/day |
| Once daily | 0 9 * * * | ~3 | ~$0.10/day |
Categories & Keywords
Categories
Admin → Categories → Add. Every post can be assigned a category. Categories appear in navigation, breadcrumbs, and sitemaps automatically.
Keywords Bank
Admin → Keywords → add keywords one per line. When the AI Queue runs out of topics, the cron automatically picks unused keywords from this bank to generate new topics. This creates a self-sustaining content engine.
Ad Zones
Admin → Ad Zones. Click any slot card to configure it. Paste your AdSense or GPT code, tick Active, save.
Google Ad Manager (GPT) Setup
Step 1: Admin → Site Settings → Custom Head Scripts → paste your GPT script:
<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
<script>
window.googletag = window.googletag || {cmd: []};
googletag.cmd.push(function() {
googletag.defineSlot('/YOUR_NETWORK/UNIT', [320, 50], 'div-id').addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.enableServices();
});
</script>
Step 2: Admin → Ad Zones → select zone → paste the display() div → tick Active.
Email Leads
Leads are captured automatically from six placements: popup, footer newsletter, inline post form, end-of-post form, sidebar widget, and homepage widget.
Brevo Integration (Recommended — free up to 300 emails/day)
- Sign up at brevo.com
Free plan included
- Get API Key
Brevo → Settings → API Keys → Create
- Create a Contact List
Note the List ID number
- Add to Admin
Admin → Settings → Brevo API Key + List ID → Save
Mailchimp Integration
Admin → Settings → Mailchimp API Key + List ID → Save. Subscribers are automatically added to your list on sign-up.
Export Leads
Admin → Email Leads → Export CSV. Exports all leads for this site with email, name, source, and timestamp.
Site Settings
| Setting | Description |
|---|---|
brevo_api_key | Brevo API key for email list sync |
brevo_list_id | Brevo contact list ID |
mailchimp_api_key | Mailchimp API key |
mailchimp_list_id | Mailchimp audience ID |
clarity_code | Microsoft Clarity tracking ID |
custom_head_scripts | GTM, GPT, or any custom head script |
ads_txt | Custom ads.txt content (per domain) |
robots_txt | Custom robots.txt content (per domain) |
jsearch_api_key | JSearch API for live jobs board (optional) |
Themes & Customisation
Themes live in sites/themename/theme/. Two themes included:
| Theme | Best For | Style |
|---|---|---|
default | Beauty, lifestyle, health, general | Light, clean, DM Serif + DM Sans |
adtech | Tech, SaaS, AdTech, programming | Dark slate, Space Grotesk + Space Mono |
Creating a Custom Theme
- Copy the default theme
cp -r sites/default sites/mytheme - Edit CSS variables
Open
sites/mytheme/theme/theme.cssand change the:rootcolour variables - Customise templates
Edit
home.php,post.php,partials/header.php,partials/footer.php - Activate
Admin → All Sites → Edit → Theme:
mytheme
Multi-site Setup
- Point domain to same folder
In cPanel → Addon Domains, point all domains to the same document root as your main installation
- Add site in admin
Admin → All Sites → Add New Site. Enter domain, brand, niche, theme
- Add categories and queue
Set up categories and add topics to the AI queue for the new site
- Set up cron for new site
Add a cron job with the new site's ID:
generate.php?site=2&limit=3
Cron & Automation
The cron runner at generate.php is standalone — no authentication required. Call it with:
https://yourdomain.com/generate.php?site=1&limit=3
Parameters:
site=1 ← your site ID (Admin → All Sites)
limit=3 ← posts to generate per run (max 10)
Monitor Generation
Admin → AI Queue shows all jobs with statuses:
- pending — waiting to run
- processing — currently generating
- done — published successfully
- failed — error occurred, click Retry
SEO Features
| Feature | Details |
|---|---|
| Dynamic Sitemap | Auto-generated at /sitemap.xml — posts, pages, categories |
| robots.txt | Custom per domain, set in Admin → Settings |
| ads.txt | Custom per domain, set in Admin → Settings |
| Article Schema | JSON-LD on every post, auto-generated or custom |
| Open Graph | og:title, og:description, og:image on every page |
| Twitter Cards | summary_large_image cards on posts |
| Canonical URLs | Self-referencing canonical on every page |
| Breadcrumbs | With BreadcrumbList schema markup |
| RSS Feed | Auto-generated at /feed |
| GA4 Integration | Add GA4 ID per site in Admin → All Sites |
License & Support
- 1 domain
- All core features
- 6 months support
- 1 year updates
- White-label
- Client use
- Unlimited domains
- All core features
- 12 months priority support
- 1 year updates
- White-label
- Client sites
- Unlimited domains
- All core features
- 12 months support + consultations
- 1 year updates
- White-label
- Build for clients
Activating Your License
Add your license key to core/db.config.php:
define('ABN_LICENSE', 'ABN-A-XXXX-XXXX-XXXX');
The system validates against license.adbellmedia.com and caches the result for 24 hours. Your site continues working even if the license server is temporarily unreachable.
Response time: 24–48 hours (Mon–Fri)
Changelog
- Multi-site blog network from single PHP codebase
- Claude AI content generation with queue system
- 10 predefined ad zones (AdSense + GAM + custom)
- Email lead capture with Brevo + Mailchimp
- Two themes: default (light) and adtech (dark)
- Web installer (setup.php)
- Dynamic sitemap, per-domain robots.txt + ads.txt
- Static HTML cache for performance
- 27-tool AdTech tools hub
- Jobs board with live JSearch API integration
- License validation system
Troubleshooting
500 Error on all pages
Check core/db.config.php exists with correct database credentials. View the PHP error log in cPanel → Error Logs.
404 on all pages except homepage
The .htaccess file is missing or mod_rewrite is disabled. Re-upload .htaccess (it's hidden — enable "show hidden files" in your FTP client).
Posts not generating
- Visit
yourdomain.com/generate.php?site=1&limit=1directly and check the output - Verify
AB_CLAUDE_KEYis set indb.config.php - Check the Anthropic account has credits at console.anthropic.com
- Check Admin → AI Queue has pending items
Images not showing on posts
If AI generated posts with broken image URLs, run the content fixer:
https://yourdomain.com/install/fix-content.php?key=fix123
Delete that file immediately after running.
Admin login not working
Reset password via phpMyAdmin. First, generate a hash by creating a temporary file on your server:
// Create /reset.php temporarily
<?php echo password_hash('YourNewPassword', PASSWORD_BCRYPT); ?>
Then in phpMyAdmin:
UPDATE ab_admins SET password_hash = 'PASTE_HASH' WHERE username = 'admin';
Ads not displaying
- Verify the GPT/AdSense initialisation script is in Admin → Settings → Custom Head Scripts
- Verify the ad zone is set to Active in Admin → Ad Zones
- Open browser DevTools → Console and check for JavaScript errors
- AdSense can take 24–72 hours to start serving after account approval
Emails not sending
Check your Brevo API key and List ID in Admin → Settings. Test by submitting the popup form and checking Admin → Email Leads for the new entry. If it appears in leads but Brevo shows nothing, verify the API key is correct.
Adbell Blog Network v1.0.0 © 2026 Adbell Media