https://github.com/arraypress/wp-referrer-utils
A lean WordPress library for HTTP referrer detection and analysis.
https://github.com/arraypress/wp-referrer-utils
Last synced: 5 days ago
JSON representation
A lean WordPress library for HTTP referrer detection and analysis.
- Host: GitHub
- URL: https://github.com/arraypress/wp-referrer-utils
- Owner: arraypress
- Created: 2025-07-16T09:16:52.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-09-08T19:24:59.000Z (5 months ago)
- Last Synced: 2025-09-23T00:20:54.850Z (4 months ago)
- Language: PHP
- Size: 8.79 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# WordPress Referrer Utils - HTTP Referrer Detection & Analysis
A lightweight WordPress library for detecting and analyzing HTTP referrers. Perfect for analytics, security, and understanding your traffic sources without external dependencies.
## Features
* 🎯 **Clean API**: WordPress-style snake_case methods with consistent interfaces
* 🔍 **Traffic Analysis**: Identify search engines, social media, and campaign sources
* 🔒 **Security Ready**: Validate referrers for CSRF protection and security checks
* 📊 **UTM Support**: Extract campaign parameters for marketing analysis
* 🔗 **Domain Operations**: Check internal vs external referrers
* 🌐 **Search Engine Detection**: Identify 10+ search engines and extract search terms
* 📱 **Social Media Detection**: Recognize 13+ social platforms
* 🛡️ **WordPress Native**: Uses WordPress sanitization and validation
## Requirements
* PHP 7.4 or later
* WordPress 5.0 or later
## Installation
```bash
composer require arraypress/wp-referrer-utils
```
## Basic Usage
### Get Referrer Information
```php
use ArrayPress\ReferrerUtils\Referrer;
// Get current referrer
$referrer = Referrer::get();
// Returns: "https://google.com/search?q=wordpress" or null
// Check if valid URL
if ( Referrer::is_valid( $referrer ) ) {
// Valid referrer URL
}
// Get domain from referrer
$domain = Referrer::get_domain();
// Returns: "google.com"
```
### Traffic Source Analysis
```php
// Get traffic source type
$source = Referrer::get_traffic_source();
// Returns: 'search', 'social', 'direct', 'referral', 'campaign', or 'unknown'
// Check specific source types
if ( Referrer::is_search_engine() ) {
// Visitor came from search engine
}
if ( Referrer::is_social() ) {
// Visitor came from social media
}
if ( Referrer::is_external() ) {
// Visitor came from external site
}
```
### Search Engine Detection
```php
// Get search engine name
$engine = Referrer::get_search_engine();
// Returns: "google", "bing", "yahoo", "duckduckgo", etc.
// Get search terms
$terms = Referrer::get_search_terms();
// Returns: "wordpress plugins" or null
```
### Social Media Detection
```php
// Get social platform
$platform = Referrer::get_social_platform();
// Returns: "facebook", "twitter", "instagram", "linkedin", etc.
```
### Campaign Tracking
```php
// Get UTM parameters
$utm = Referrer::get_utm_parameters();
/*
Returns:
[
'source' => 'newsletter',
'medium' => 'email',
'campaign' => 'summer-sale',
'term' => 'discount',
'content' => 'header-link'
]
*/
```
### Comprehensive Analysis
```php
// Get all referrer information at once
$info = Referrer::get_referrer_info();
/*
Returns:
[
'url' => 'https://google.com/search?q=wordpress',
'is_valid' => true,
'domain' => 'google.com',
'root_domain' => 'google.com',
'is_external' => true,
'search_engine' => 'google',
'search_terms' => 'wordpress',
'social_platform' => null,
'utm_parameters' => [],
'traffic_source' => 'search'
]
*/
```
## Common Use Cases
### Analytics Tracking
```php
function track_visitor_sources() {
$info = Referrer::get_referrer_info();
// Store analytics data
$analytics = [
'traffic_source' => $info['traffic_source'],
'search_engine' => $info['search_engine'],
'search_terms' => $info['search_terms'],
'social_platform' => $info['social_platform'],
'utm_source' => $info['utm_parameters']['source'],
'timestamp' => current_time( 'mysql' )
];
update_option( 'traffic_analytics', $analytics );
}
add_action( 'wp_head', 'track_visitor_sources' );
```
### CSRF Protection
```php
function check_form_referrer() {
if ( ! Referrer::is_internal() ) {
wp_die( 'Invalid form submission - referrer check failed.' );
}
}
// Use in form processing
if ( $_POST['submit'] ) {
check_form_referrer();
// Process form...
}
```
### Content Personalization
```php
function personalize_content_by_source() {
$source = Referrer::get_traffic_source();
switch ( $source ) {
case 'search':
echo '
Welcome from search!';
break;
case 'social':
$platform = Referrer::get_social_platform();
echo "";
break;
case 'campaign':
$utm = Referrer::get_utm_parameters();
echo "Welcome {$utm['campaign']} visitor!";
break;
}
}
add_action( 'wp_head', 'personalize_content_by_source' );
```
## Supported Platforms
### Search Engines (17+)
**Traditional Search Engines:**
- **Google** - All international domains (google.com, google.co.uk, etc.)
- **Bing** - Microsoft's search engine
- **Yahoo** - Yahoo Search with international variants
- **DuckDuckGo** - Privacy-focused search
- **Baidu** - Chinese search engine
- **Yandex** - Russian search engine
- **Ask** - Ask.com search
- **AOL** - AOL Search
- **Ecosia** - Environmental search engine
- **Startpage** - Privacy search engine
**AI Search Engines (2024-2025):**
- **Perplexity** - AI-powered answer engine with citations
- **You.com** - AI search with personalized results
- **Phind** - AI search engine for developers
- **Kagi** - Premium ad-free search with AI features
- **SearchGPT** - OpenAI's ChatGPT Search
- **Andi** - Conversational AI search assistant
- **DeepSeek** - AI-powered search and chat
### Social Media Platforms (13+)
- **Facebook** - Including mobile variants and short links (fb.me, m.me)
- **Twitter/X** - Including t.co short links and x.com rebrand
- **Instagram** - Meta's photo platform with ig.me short links
- **LinkedIn** - Professional networking with lnkd.in short links
- **Pinterest** - Visual discovery with pin.it short links
- **Reddit** - Social news aggregation with redd.it short links
- **YouTube** - Video platform and youtu.be short links
- **TikTok** - Short video platform with vm.tiktok.com
- **Snapchat** - Multimedia messaging
- **Discord** - Gaming and community chat with discord.gg
- **Telegram** - Messaging platform with t.me short links
- **WhatsApp** - Messaging app with wa.me short links
- **Mastodon** - Decentralized social network
- **Threads** - Meta's Twitter alternative
### Campaign Parameters
- **UTM Parameters** - utm_source, utm_medium, utm_campaign, utm_term, utm_content
- **Search Parameters** - q, query, p, wd, text (for search term extraction)
## Method Reference
### Core Methods
- `get()` - Get current HTTP referrer
- `is_valid( ?string $referrer )` - Check if referrer is valid URL
- `get_domain( ?string $referrer )` - Get domain from referrer
- `get_root_domain( ?string $referrer )` - Get root domain without subdomains
### Domain Operations
- `is_external( ?string $referrer, ?string $current_site )` - Check if external referrer
- `is_internal( ?string $referrer, ?string $current_site )` - Check if internal referrer
### Search Engine Detection
- `get_search_engine( ?string $referrer )` - Get search engine name
- `get_search_terms( ?string $referrer )` - Get search terms
- `is_search_engine( ?string $referrer )` - Check if from search engine
### Social Media Detection
- `get_social_platform( ?string $referrer )` - Get social platform name
- `is_social( ?string $referrer )` - Check if from social media
### Campaign Tracking
- `get_utm_parameters( ?string $referrer )` - Get UTM parameters array
- `get_campaign_source( ?string $referrer )` - Get campaign source
### Analysis
- `get_traffic_source( ?string $referrer )` - Get traffic source type
- `get_referrer_info( ?string $referrer )` - Get comprehensive referrer information
## WordPress Integration
- **Sanitized Input**: All referrer data is sanitized using `wp_strip_all_tags()` and `wp_unslash()`
- **Enhanced Security**: UTM parameters and search terms use `sanitize_text_field()` for additional protection
- **WordPress Native**: Uses `get_option('siteurl')` for site URL detection
- **Performance Optimized**: Efficient domain lookups with comprehensive coverage
- **Standards Compliant**: Follows WordPress coding standards and best practices
## Privacy Considerations
This library analyzes referrer headers that are automatically sent by browsers. It:
- **Does not store personal data** - only analyzes traffic patterns
- **Respects user privacy** - works with publicly available referrer information
- **GDPR Compliant** - when used for analytics, follows standard referrer analysis practices
## Requirements
- PHP 7.4+
- WordPress 5.0+
## Testing
The library has been thoroughly tested with:
- ✅ **100% test coverage** for core functionality
- ✅ **Real-world referrer patterns** from major platforms
- ✅ **Edge case handling** for malformed URLs and invalid input
- ✅ **Performance validation** with hundreds of URLs
- ✅ **WordPress integration** with proper sanitization
- ✅ **Modern AI search engines** and social media short links
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
This project is licensed under the GPL-2.0-or-later License.
## Support
- [Documentation](https://github.com/arraypress/wp-referrer-utils)
- [Issue Tracker](https://github.com/arraypress/wp-referrer-utils/issues)