arraypress / wp-referrer-utils
A lean WordPress library for HTTP referrer detection and analysis
dev-main
2025-09-05 10:02 UTC
Requires
- php: >=7.4
This package is auto-updated.
Last update: 2025-09-05 10:03:02 UTC
README
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
composer require arraypress/wp-referrer-utils
Basic Usage
Get Referrer Information
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
// 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
// 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
// Get social platform $platform = Referrer::get_social_platform(); // Returns: "facebook", "twitter", "instagram", "linkedin", etc.
Campaign Tracking
// Get UTM parameters $utm = Referrer::get_utm_parameters(); /* Returns: [ 'source' => 'newsletter', 'medium' => 'email', 'campaign' => 'summer-sale', 'term' => 'discount', 'content' => 'header-link' ] */
Comprehensive Analysis
// 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
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
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
function personalize_content_by_source() { $source = Referrer::get_traffic_source(); switch ( $source ) { case 'search': echo '<div class="welcome-search">Welcome from search!</div>'; break; case 'social': $platform = Referrer::get_social_platform(); echo "<div class='welcome-social'>Thanks for visiting from {$platform}!</div>"; break; case 'campaign': $utm = Referrer::get_utm_parameters(); echo "<div class='welcome-campaign'>Welcome {$utm['campaign']} visitor!</div>"; 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 referreris_valid( ?string $referrer )
- Check if referrer is valid URLget_domain( ?string $referrer )
- Get domain from referrerget_root_domain( ?string $referrer )
- Get root domain without subdomains
Domain Operations
is_external( ?string $referrer, ?string $current_site )
- Check if external referreris_internal( ?string $referrer, ?string $current_site )
- Check if internal referrer
Search Engine Detection
get_search_engine( ?string $referrer )
- Get search engine nameget_search_terms( ?string $referrer )
- Get search termsis_search_engine( ?string $referrer )
- Check if from search engine
Social Media Detection
get_social_platform( ?string $referrer )
- Get social platform nameis_social( ?string $referrer )
- Check if from social media
Campaign Tracking
get_utm_parameters( ?string $referrer )
- Get UTM parameters arrayget_campaign_source( ?string $referrer )
- Get campaign source
Analysis
get_traffic_source( ?string $referrer )
- Get traffic source typeget_referrer_info( ?string $referrer )
- Get comprehensive referrer information
WordPress Integration
- Sanitized Input: All referrer data is sanitized using
wp_strip_all_tags()
andwp_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.