A lightweight plugin for Open Journal Systems (OJS) 3.4 that displays external references (backlinks) to your articles on article detail pages. Works with backlink data exported from SEMrush, Ahrefs, or Google Search Console.
- ✅ CSV/Excel Upload: Import backlink data from SEMrush, Ahrefs, or GSC exports
- ✅ Dual URL Matching: Matches backlinks to both OJS article pages and repository full-text URLs
- ✅ Grouped Display: Backlinks organized by referring domain with expandable details
- ✅ Reference Type Detection: Shows whether backlink points to "Abstract Page" or "Full Text"
- ✅ Mobile Optimized: Responsive design for all screen sizes
- ✅ Zero Server Load: Data cached in database, no real-time API calls
- ✅ Easy Updates: Upload new CSV anytime to refresh backlink data
- ✅ Repository Galley Integration: Automatically detects WordPress/repository URLs from REPO galleys
- OJS 3.4 or higher
- PHP 7.3 or higher
- Access to export backlinks from SEMrush, Ahrefs, or Google Search Console
- No API keys required
- No external dependencies
Via cPanel:
- Log in to cPanel
- Open File Manager
- Navigate to:
public_html/plugins/generic/ - Create folder:
backlinkTracker - Upload all plugin files to this folder
Via FTP:
- Connect to your server via FTP
- Navigate to:
/plugins/generic/ - Create folder:
backlinkTracker - Upload all plugin files
Expected structure:
plugins/generic/backlinkTracker/
├── BacklinkTrackerPlugin.inc.php
├── BacklinkTrackerSettingsForm.inc.php
├── BacklinkHandler.inc.php
├── index.php
├── version.xml
├── README.md
├── INSTALLATION_GUIDE.md
├── PLACEMENT_GUIDE.md
├── templates/
│ ├── settingsForm.tpl
│ └── backlinkDisplay.tpl
└── locale/
├── en_US/
│ ├── locale.xml
│ └── locale.po
└── en/
├── locale.xml
└── locale.po
Ensure files are readable by your web server:
chmod -R 755 plugins/generic/backlinkTracker/- Log in to OJS as Administrator
- Go to Settings → Website → Plugins
- Find "Backlink Tracker" under Generic Plugins
- Check the checkbox to enable it
- Plugin should turn green/active
- In OJS, go to Settings → Website → Plugins
- Find "Backlink Tracker" and click the arrow (▼)
- Click "Settings"
Repository Galley Label: Enter the label you use for repository/full-text galleys
- Default:
REPO - Other common:
Repository,Full Text,Full-Text
This tells the plugin which galley contains your WordPress/repository URL.
Click "Save" to apply settings.
- Go to https://www.semrush.com/
- Sign in to your account
- In the left sidebar, click "Link Building"
- Click "Backlink Analytics"
- Enter your domain (e.g.,
ajmrr.org) - Click "Search"
- Click the "Backlinks" tab
- Set filters (optional):
- Filter by specific article URLs
- Set date range
- Filter by domain authority
- Click the "Export" button (top right)
- Choose "CSV" format
- Download the file
- Go to Plugin Settings in OJS
- Click "Choose File" under "Upload Backlinks Data"
- Select your CSV file
- Click "Upload Backlinks"
- Wait for success message: "Successfully imported X backlinks"
- Close settings window
- Go to https://search.google.com/search-console
- Select your property
- In left sidebar, click "Links"
- Under "Top linking sites", click "MORE"
- Click "Export" → "Download latest links"
- Choose "CSV" format
Follow Step 4 from SEMrush instructions above.
- Go to https://ahrefs.com/
- Sign in to your account
- Click "Site Explorer"
- Enter your domain
- Click "Backlinks" in left sidebar
- Click "Export" button
- Choose "CSV" format
- Download file
- Upload to plugin (see SEMrush Step 4)
For the plugin to match backlinks to both OJS and repository URLs:
- Go to Submissions → Active
- Click on an article
- Click "Publication" tab
- Click "Galleys"
- Click "Add Galley"
- Label: Enter
REPO(or your configured label) - Select "This galley will be available at a separate website"
- URL: Enter full repository URL (e.g.,
https://thelawbrigade.com/article/your-article-slug/) - Click "Save"
- View article on public site
- Check that "External References" section appears
- Backlinks should show "Reference Target: Abstract Page" or "Full Text"
- Navigate to any published article
- Scroll down to "External References to this Article" section
- See total count: "X references from Y unique sources"
- Click on any domain to expand and see individual backlinks
- Each backlink shows:
- Referring page URL
- Anchor text used
- Reference target (Abstract Page or Full Text)
To refresh with new data:
- Export fresh backlinks from SEMrush/Ahrefs/GSC
- Go to Plugin Settings
- Upload new CSV file
- Data is completely replaced with new upload
- Visit article pages to see updated references
Update frequency recommendation:
- Monthly: For active journals
- Quarterly: For established journals
- Annually: For archival content
By default, "External References" appears after the Abstract section. To change position, see PLACEMENT_GUIDE.md included with the plugin.
Popular placements:
- After Usage Statistics (recommended)
- After Author Biographies
- At the end of article content
The plugin expects CSV with these columns:
| Column | Description | Required |
|---|---|---|
| Page ascore | Authority score | No |
| Source title | Referring page title | No |
| Source url | Referring page URL | Yes |
| Target url | Your article URL | Yes |
| Anchor | Anchor text used | Recommended |
Supported formats:
- ✅ SEMrush backlink export
- ✅ Ahrefs backlink export
- ✅ Google Search Console links export
- ✅ Any CSV with columns: source_url, target_url, anchor
The plugin normalizes URLs before matching:
- Removes trailing slashes
- Removes query parameters
- Case-insensitive comparison
- Exact path matching
Article URLs:
- OJS:
https://ajmrr.org/journal/article/view/227 - Repo:
https://thelawbrigade.com/article/research-article-slug/
CSV Target URLs that match:
https://ajmrr.org/journal/article/view/227✅https://ajmrr.org/journal/article/view/227/✅https://ajmrr.org/journal/article/view/227?param=value✅https://thelawbrigade.com/article/research-article-slug/✅
Won't match:
https://ajmrr.org/journal/article/view/228❌ (different article)https://ajmrr.org/journal/article/❌ (partial path)
- Location: OJS database (
plugin_settingstable) - Format: JSON string
- Size: ~1-2 MB for 5,000 backlinks
- Performance: Fast database query, no file I/O
- Data persists until you upload a new CSV
- Uploading new CSV replaces all old data
- Manual clearing available in plugin settings
- No automatic cleanup
- ✅ Zero real-time API calls
- ✅ No external dependencies
- ✅ Single database query per article page
- ✅ Minimal memory footprint
- ✅ No caching layer needed
- ✅ Tested with 5,000+ backlinks
- ✅ Works with 10,000+ articles
- ✅ No performance degradation
- ✅ Suitable for large journals
Solution:
- Check file permissions (755 for directories, 644 for files)
- Clear OJS cache:
rm -rf cache/* - Verify files in correct location:
plugins/generic/backlinkTracker/
Solution:
- Convert Excel (.xlsx) to CSV before upload
- Check CSV file size (< 10 MB recommended)
- Verify CSV has required columns (source_url, target_url)
- Check PHP upload limits in php.ini
Solution:
- Verify CSV was uploaded successfully
- Check that article URLs in CSV match OJS URLs exactly
- Add REPO galley if tracking repository backlinks
- Review browser console for JavaScript errors
Solution:
- Ensure plugin is enabled
- Clear browser cache (Ctrl+F5)
- Check plugin hook placement (see PLACEMENT_GUIDE.md)
- Verify template file wasn't customized
Solution:
- URL normalization requires exact path match
- Check that CSV target URLs are complete
- Verify REPO galley URLs are correct
- Re-upload CSV if data is incorrect
- ✅ No external API keys stored
- ✅ No sensitive credentials required
- ✅ CSV data sanitized on upload
- ✅ XSS protection on display
- ✅ CSRF tokens for uploads
- ✅ All data stored in protected database
- ✅ Chrome/Edge (latest)
- ✅ Firefox (latest)
- ✅ Safari (latest)
- ✅ Mobile browsers (iOS/Android)
- Manual updates required: No automatic backlink fetching
- CSV dependency: Requires external tool exports
- Full replacement: Each upload replaces all data (no merging)
- No historical tracking: No "first seen" or "last seen" dates
Potential features for future versions:
- Excel (.xlsx) file support without conversion
- Merge mode (add new backlinks, keep old ones)
- Historical tracking with timestamps
- Export backlinks to CSV
- Backlink trend charts
- Email notifications for new backlinks
For issues or questions:
- Check this README and INSTALLATION_GUIDE.md
- Review PLACEMENT_GUIDE.md for customization
- Check OJS forum: https://forum.pkp.sfu.ca/
- Review OJS documentation: https://docs.pkp.sfu.ca/
GNU General Public License v3.0
1.0.0 - November 2025
CSV-based backlink tracking for OJS 3.4
Developed for academic journals to showcase article impact and citations from external sources.
- Initial release
- CSV upload functionality
- Dual URL matching (OJS + Repository)
- Grouped display by domain
- Reference target detection
- Mobile responsive design
- Zero external dependencies