Built around the workflow, not the workaround.
BSM Vanity URLs provides centralized management of branded redirects, dynamic QR codes, workspaces, analytics, custom domains, and optional self-service Link Portal functionality for WordPress.
Vanity URLs and Redirects
- Create branded vanity URLs for internal or external destinations.
- Support for HTTP 301, 302, 307, and 308 redirects.
- Case-insensitive vanity URL matching.
- Trailing-slash normalization.
- Incoming query-string preservation.
- Destination-defined query parameters take precedence when parameter names conflict.
- Enable, disable, organize, and manage redirects.
- Workspace-aware asset ownership.
- Site Workspace for WordPress-managed links.
- Portal workspaces for self-service link management.
- Workspace-root and member-namespace URL structures.
- Reserved URL namespace protection.
- Basic redirect analytics and request-event tracking.
Dynamic QR Codes
- Persistent dynamic QR assets with immutable QR identifiers.
- Generated
/qr/routes remain independent of destination changes. - QR destinations can be changed without replacing the public QR route.
- Multiple QR codes can reference the same destination.
- QR scan analytics.
- Destination and ownership history.
- Print Lock support for QR codes distributed in physical materials.
- Workspace-aware QR ownership.
- QR transfer between workspaces without changing the public QR identity.
- Optional transfer of historical analytics when moving a QR between workspaces.
- Historical analytics retain their original workspace attribution for auditing.
- QR transfers retain the original encoded hostname and route.
QR Image Generation
- Local QR generation with no external QR-generation service.
- No runtime Composer dependency.
- PNG export.
- JPG export.
- PNG/JPG sizes:
- 512 × 512
- 1024 × 1024
- 2048 × 2048
- True vector SVG export for Pro.
- True vector EPS export for Pro.
- Medium, Quartile, and High error-correction support.
- Quartile error correction is the default.
- Authorized QR download controller prevents direct cache access.
QR Export Cache
QR exports are generated on demand rather than permanently stored in the WordPress Media Library.
Exports are cached by workspace and QR asset:
/uploads/bsm-vanity-cache/qr/workspace-{id}/{qr-id}/
- Separate cache directories for each workspace.
- Separate directories for each QR asset.
- Seven-day cache retention based on last access.
- Automatic cleanup through BSM maintenance.
- Expired exports regenerate automatically when requested.
- QR database records and public routes are never removed by cache cleanup.
- QR configuration changes invalidate affected cached exports.
- Workspace transfers do not move cached files.
- New workspace exports regenerate on demand.
- Old workspace cache files expire naturally under the seven-day retention policy.
- Authorization changes immediately when ownership transfers, regardless of physical cache retention.
Workspaces
- Site Workspace for WordPress-managed assets.
- Personal Portal workspaces.
- Team Portal workspaces.
- Workspace-owned links and QR codes.
- Asset ownership remains with the workspace rather than individual users.
- Active workspace selection.
- Workspace membership validation.
- Owner, Manager, Editor, Creator, and Analyst role architecture.
- Capability-based authorization.
- Allow, Deny, and Inherit capability overrides.
- Workspace link quotas.
- Workspace seat limits.
- Workspace transfer and audit infrastructure.
Team Invitations
- Invite WordPress users to Portal workspaces by email.
- Pending invitations consume workspace seats.
- Invitations include workspace role and member namespace.
- Invitation tokens expire automatically.
- Accepted membership is permanently associated with the selected WordPress account.
- Membership does not depend on the user's current email address after acceptance.
- Workspace ownership and membership are retained independently of individual asset creators.
Portal Plans
- Administrator-managed Portal plan definitions.
- Configurable link limits.
- Configurable seat limits.
- Configurable analytics retention.
- Configurable feature capabilities.
- Initial plan definitions for Free, Individual, Team, and Business configurations.
- Workspace Owners cannot modify plan definitions.
- Plan enforcement remains separate from workspace roles and capabilities.
Link Portal
BSM Vanity URLs Pro includes an optional self-service Link Portal.
- Portal disabled by default.
- Managed Portal route.
[bsm_vanity_portal]shortcode support.- WordPress user authentication.
- Workspace-aware Portal dashboard.
- Workspace switching.
- Self-service link creation.
- Workspace and member namespace routing.
- Portal analytics summaries.
- Portal asset listing.
- Workspace Owner authority model.
- Site administrators retain supervisory access.
Custom Domains
- Workspace custom-domain records.
- DNS TXT ownership verification.
- Verification tokens generated by BSM.
- Only verified domains can participate in branded routing.
- Primary-domain architecture.
- Custom-domain routing remains independent of individual redirect records.
- Custom domains are associated with workspaces rather than duplicated across links.
- Domain ownership verification is separate from DNS routing and TLS availability.
- BSM does not falsely report HTTPS readiness when certificate provisioning must occur at the hosting/CDN layer.
Branding
Workspace branding provides two independent policies:
Branded Links
Uses the workspace's verified primary custom domain for newly generated vanity links.
Branded QR Codes
Uses the workspace's verified primary custom domain inside newly generated QR codes.
Branded QR Codes are disabled by default.
Enabling Branded QR Codes requires explicit acknowledgement that the custom hostname becomes part of the QR's permanent encoded identity and that printed QR codes depend on continued ownership, DNS configuration, HTTPS availability, and routing of that hostname.
Branded QR Risk Acceptance
- Mandatory confirmation before enabling Branded QR Codes.
- Acceptance is stored as an auditable policy record.
- Records include:
- Workspace/site scope
- Domain
- Domain ID
- Accepting WordPress user
- Authority context
- Acceptance timestamp
- Acceptance statement version
- Full accepted statement
- SHA-256 statement hash
- Changing the branded QR domain requires a new acceptance.
- Changing Workspace Owners does not invalidate an existing unchanged policy acceptance.
- Existing QR codes never silently change hostname when branding settings change.
Branding Authority
For the Site Workspace:
- WordPress administrators and authorized BSM plugin administrators control branding.
- Site administrators accept branded-QR risk statements.
For Link Portal workspaces:
- The Workspace Owner controls workspace branding.
- Only the Workspace Owner may establish the branded-QR risk policy for that workspace.
- Managers, Editors, Creators, and Analysts cannot establish workspace-wide branded QR risk policies.
WordPress administrators retain supervisory authority over Portal workspace branding.
Administrative Branding Override
- WordPress administrators can disable Portal workspace branding as an emergency/supervisory action.
- Administrators can restore a previously overridden workspace branding policy.
- Administrative overrides are audited.
- Overrides never rewrite existing QR identities.
- Existing QR encoded URLs remain immutable.
QR Host Identity
Every QR records the hostname and URL that were actually encoded when it was created.
Stored identity includes:
- Host policy
- Encoded hostname
- Encoded domain ID when applicable
- Complete encoded URL
- Encoding timestamp
- Print Lock state
Changing a workspace's primary custom domain affects future QR codes only.
Previously generated or printed QR codes continue using their original hostname.
Analytics
- Request-event analytics.
- QR scan tracking.
- Workspace attribution.
- QR-specific analytics identifiers.
- Daily traffic summaries.
- Hourly traffic reporting.
- Device classification.
- Operating-system reporting.
- Referrer-host reporting.
- First-hit and last-hit tracking.
- Historical analytics remain attached to persistent QR assets.
- Workspace attribution at the time of an event is retained for audit purposes.
- QR transfer can optionally expose complete historical analytics to the destination workspace or begin destination-workspace reporting from the transfer boundary.
Interstitials
- Pro interstitial routing architecture.
- Workspace interstitial records.
- Countdown support.
- Continue Now action.
- Responsive desktop/mobile rendering.
- Workspace-plan mandatory-interstitial support.
- Expiration-warning system interstitial.
- Interstitial configuration remains separate from redirect destinations.
Expiration Lifecycle
Portal-managed workspace assets support a staged expiration lifecycle.
- Days 0–7: normal operation/grace period.
- Days 8–14: expiration-warning interstitial.
- Days 15–30: configurable dead-link experience.
- Days 31–60: retained dead/tombstone state.
- Day 60+: eligible for cleanup processing.
- Public QR routes remain reserved through the configured reservation period.
- Day 180: route becomes eligible for safe release.
- Print Locked QR routes are protected from automatic release.
- Significant recent traffic can prevent automatic route reassignment and require administrative review.
- Renewal before cleanup can restore retained workspace assets.
- Expiration does not delete analytics or audit history automatically.
Scheduled Maintenance
- Daily BSM maintenance process.
- Expired invitation cleanup.
- Workspace expiration processing.
- QR route reservation/release checks.
- Seven-day QR export-cache cleanup.
- Empty cache-directory cleanup.
- Scheduled maintenance is removed cleanly when the plugin is deactivated.
Data Protection and Lifecycle
- QR export files are treated as temporary cache artifacts.
- Persistent QR identity is stored in the database.
- QR cache cleanup never deletes QR records.
- Asset transfers retain audit history.
- Workspace ownership changes do not destroy public routes.
- User deletion does not automatically delete workspace-owned assets.
- Plugin uninstall retains BSM Vanity URLs data unless explicitly removed through an administrative data-management process.
Licensing Architecture
- Designed for BSM shared licensing client contract version 1.
- Pro capabilities are exposed through the BSM licensing capability model.
- License administration remains separate from individual feature implementation.
- License submenu remains the final BSM Vanity URLs administration item.
- Stable plugin directory:
/wp-content/plugins/bsm-vanity-urls/
Technical
- Dedicated BSM Vanity URLs database tables.
- Workspace-aware routing.
- Host-aware routing.
- Persistent QR routing.
- Capability-based authorization.
- Nonce-protected administrative actions.
- WordPress timezone-aware lifecycle processing.
- Stable plugin folder across upgrades.
- BSM Strategy plugin authorship metadata.
Requirements
- Requires WordPress
- 6.4
- Tested Through
- 7.1.2
- Requires PHP
- 8.0
Changelog
0.3.6 — October 6, 2026
BSM Vanity URLs — Changelog
Smart redirects, trackable links, dynamic QR codes, URL intelligence, analytics, workspaces, campaigns, advanced routing, migration tools, and a mobile-first Link Portal for WordPress.
Version 0.3.6 — Editor Integration
Editor Integration
- Added BSM Vanity URL integration directly to the WordPress content editor.
- Free includes the BSM Vanity URL meta box for Posts and Pages.
- Pro extends editor integration to administrator-selected public custom post types.
- Added a dedicated Settings → Editor Integration section with its own Save Editor Integration button.
- Added optional Auto-create on publish behavior.
- Auto-create is OFF by default.
- Auto-create creates only the Vanity Link and never automatically creates a QR code.
- Supports Gutenberg and the Classic Editor through the standard WordPress meta-box API.
Editor Meta Box
- Displays the associated public Vanity URL directly in the content editor.
- Displays route status and hit count.
- Added Copy, Open, Share, and Edit Vanity Link actions.
- Published content without an associated Link can create one directly from the editor.
- Provides an editable proposed vanity path during creation.
- Draft and unpublished content does not receive a public Vanity URL by default.
Durable WordPress Content Association
- Added
source_object_id,source_object_type,source_object_status, andsource_suspendedLink fields. - Added lightweight
_bsmv_link_idpost metadata for fast editor lookup. - WordPress permalink changes update the associated Link destination without changing the Vanity URL identity.
- Vanity slug, analytics, QR identities, campaigns, and history remain intact when the WordPress permalink changes.
- Content associations are preserved by BSM JSON export/import and rollback snapshots.
Content Lifecycle Safety
- Moving associated content out of Published status suspends an active associated Vanity Link instead of deleting it.
- Republishing restores the route only when BSM previously suspended it because of source-content status.
- A manually disabled or inactive Link is never silently reactivated by publishing the WordPress content.
- Existing custom-post-type associations continue lifecycle synchronization if Pro entitlement later becomes unavailable.
- Loss of Pro removes CPT editor-management access but does not weaken route safety.
QR Behavior
- QR creation is always explicit.
- Creating a Vanity Link never automatically creates a QR code.
- Auto-create on publish never creates a QR code.
- Links with no QR display No QR code has been created and a Create QR Code action.
- Links with existing QR assets display the number of associated QR codes.
- Added Manage QRs and Create Another QR actions.
- Multiple QR assets remain supported for a single Vanity Link.
- Editor-created QR codes use the existing persistent BSM QR architecture, including routing, analytics, branding, lifecycle, Q error correction, and Print Lock.
Licensing
- Shared BSM licensing contract remains version 1.
editor_integrationis available in Free.editor_integration_posts_pagesis available in Free.editor_integration_cptis Pro.
Technical
- Plugin version: 0.3.6
- Database schema: 0.3.6
- Stable installed directory:
bsm-vanity-urls/ - Existing Links and QR assets are preserved during schema upgrade.
Version 0.3.5 — Link Portal Mobile First
Mobile-First Link Portal
- Redesigned the Pro Link Portal as a mobile-first workflow.
- Portal is responsive from 320px upward.
- Added touch-friendly controls and full-width phone forms.
- Desktop Link tables become mobile Link cards on narrow screens.
- Workspace selector is optimized for phone layouts.
- Groups, Campaigns, Invitations, Branding, and Emergency Routing interfaces are mobile-safe.
- Long URLs wrap safely without breaking layouts.
- Dialogs remain within the mobile viewport.
- Core Portal actions no longer depend on hover.
- Added WordPress administration compatibility improvements for mobile overflow, forms, and dialogs without replacing the standard wp-admin experience.
Mobile Link Creation
- Added phone-first Create Link workflow.
- Supports title, slug, destination, namespace, and optional sharing metadata.
- Added explicit server-side validation messages for:
- Invalid destinations
- Reserved paths
- Workspace quota limits
- Duplicate routes
- Database failures
- Successful creation now returns visible confirmation instead of failing or redirecting without useful feedback.
Sharing
- Added workspace-level configurable Share Message.
- Added optional per-Link Share Message override.
- Share Message resolution order:
- Link override
- Workspace default
- BSM default
- Default Share Message:
Thought you might find this useful: {link} - Supported Share Message tokens:
{link}{title}{workspace}{description}
- Custom templates and overrides must contain
{link}. - Added live workspace Share Message preview.
- Added mobile actions for Copy, Native Share, Email, and Text.
- Native Share passes the resolved configured message to the device share sheet.
- Prevents duplicate URLs when the configured message already contains
{link}.
Portal QR Access
- Added QR preview directly from Portal Link cards.
- Added PNG QR download.
- Added SVG QR download.
- QR payload uses the actual public short URL, including the branded hostname where applicable, rather than the destination URL.
- QR downloads use an authenticated BSM endpoint.
- Download authorization verifies nonce, workspace membership, Link visibility, and Link/workspace ownership.
- QR cache and filesystem paths are never exposed directly to the browser.
- Reuses the existing BSM QR encoder and rendering architecture instead of introducing a second QR system.
Data and Schema
- Added nullable Link fields:
titledescriptionshare_message
- Existing Links remain backward compatible.
- Workspace Share Messages are stored as workspace-scoped BSM configuration.
- JSON import/export preserves Link sharing fields.
- Rollback restoration preserves Link sharing fields.
Technical
- Plugin version: 0.3.5
- Database schema: 0.3.5
- Licensing contract: v1
- Stable installed directory:
bsm-vanity-urls/
Version 0.3.4 — Validation & Operational Hardening
Code and Database Validation
- Audited PHP source and BSM database table references.
- Corrected JSON export to use the actual
routing_rulestable and itsconditionscolumn. - Removed obsolete
rulesandrule_conditionsexport references. - Added database write-failure handling to:
- JSON imports
- Migration execution
- Migration item recording
- Rollback snapshots
- Route replacement
- Rollback operations
- Migration batches can complete with
completed_with_errorsrather than incorrectly reporting unconditional success. - Rollback records
rollback_errorfor individual items when reversal fails. - Failed rollback items are no longer incorrectly marked as successfully rolled back.
Yoast SEO Premium Migration
- Corrected Yoast SEO Premium migration discovery.
- Reads
wpseo-premium-redirects-export-plainas the primary source. - Uses
wpseo-premium-redirects-baseas a compatibility fallback. - Regex and other non-exact records remain Unsupported rather than being guessed into live BSM routes.
Settings and Administration
- Separated Webhook and GA4 settings into independent forms.
- Added independent Save buttons for Webhooks and GA4.
- Saving Webhooks no longer rewrites GA4 configuration.
- Saving GA4 no longer rewrites Webhook configuration.
- General Settings separated into independently saved:
- Portal
- Business Search Manager
- Link Behavior
- Section handlers update only configuration keys owned by that section.
- Integration secret fields are no longer displayed after storage.
- Leaving a secret field blank preserves the existing stored secret.
- Removed duplicate WP-CLI heading.
Integration and Security Hardening
- Webhook and GA4 API secrets are encrypted at rest when OpenSSL is available.
- Encryption uses installation-specific WordPress secrets.
- Legacy plaintext values remain readable and are encrypted on their next save.
- Webhook signatures now include
X-BSM-Timestamp. - Webhook signing covers timestamp plus payload, enabling receivers to enforce replay windows.
- GA4 debug validation uses
ENFORCE_RECOMMENDATIONS. - GA4 administration explicitly notes that Measurement Protocol debug validation verifies payload structure but does not prove the API secret itself is valid.
Namespace and WordPress Compatibility
- Audited plugin namespace usage.
- PHP classes use the
BSMV_prefix. - Plugin constants use the
BSMV_prefix. - Database tables use the WordPress site prefix plus
bsmv_. - Options, cron hooks, actions, cookies, and administration slugs remain BSMV/bsmv scoped.
- No generic PHP function names or WordPress core global variables are declared by the plugin.
- User-controlled SQL values were reviewed for
$wpdb->prepare(), typed casting, or WordPress database insert/update APIs.
Validation
- PHP syntax validation passed for all PHP files.
- Database table/schema cross-check found no references to nonexistent BSMV tables.
- ZIP archive integrity validation completed successfully.
Technical
- Plugin version: 0.3.4
- Database schema: 0.3.4
- Licensing contract: v1
- Stable installed directory:
bsm-vanity-urls/
Version 0.3.3 — Migration & Operational Hardening
Migration Center
- Added migration architecture for Redirection and Yoast SEO Premium Redirect Manager.
- Added staged migration workflow:
Inventory → Dry Run → Review → Execute → Rollback - Migration inventory is read-only.
- Dry Run performs no routing writes.
- Migration candidates are classified as:
- New
- Duplicate
- Conflict
- Unsupported
- Unsafe
- Unsupported or uncertain source records are not guessed into live BSM redirects.
Migration Conflict Handling
- Added explicit conflict policies:
- Skip
- Create Inactive
- Replace
- Skip leaves the existing BSM route untouched.
- Create Inactive imports the object without allowing it to receive live traffic.
- Replace snapshots the existing BSM route before applying imported configuration.
- Replace requires explicit administrator authorization.
Migration Batch Records
- Added immutable migration batch/item records.
- Migration items retain:
- Source
- Source record ID
- Original source payload
- Classification
- Selected action
- Resulting BSM Link ID
- Rollback Snapshot ID
- Status
- Rollback operates from BSM migration records and does not depend on the original redirect plugin still being installed or unchanged.
Transactional Batch Rollback
- Batch rollback reverses configuration changes made by the migration.
- Newly created routes from the batch are removed.
- Inactive routes created by the batch are removed.
- Replaced routes are restored from their pre-migration snapshots.
- Skipped, Unsupported, and Unsafe items remain untouched.
- Migration and rollback audit records are retained.
- Completed rollback state prevents blind double-reversal.
Analytics Preservation
- Migration rollback never rewrites historical analytics.
- Traffic generated by an imported route before rollback remains recorded.
- Historical event records retain their route and migration context after configuration rollback.
Webhook Testing
- Added explicit Webhook test delivery.
- Test delivery uses the same HMAC signing architecture as production Webhooks.
- Test results are recorded in integration delivery diagnostics.
GA4 Testing
- Added GA4 configuration validation.
- Added explicit GA4 test event support.
- Test event uses
bsm_vanity_test. - Validation responses are surfaced to administrators.
Integration Diagnostics
- Expanded diagnostics for:
- Webhook enabled state
- Webhook URL validity
- Webhook signing-secret availability
- GA4 enabled state
- Measurement ID format
- GA4 API-secret availability
- Scheduled integration delivery
- Competing redirect engines
Redirect Migration Safety
- BSM does not automatically deactivate Redirection or Yoast SEO Premium.
- Administrators can review migration reconciliation before disabling a competing redirect engine.
- Existing redirect-conflict warnings remain until the competing engine is actually inactive.
Technical
- Plugin version: 0.3.3
- Database schema: 0.3.3
- Licensing contract: v1
- Stable installed directory:
bsm-vanity-urls/
Version 0.3.2 — Integrations & Import/Export
Outbound Webhooks
- Added outbound Webhook integrations.
- Added configurable event subscriptions.
- Added HMAC-SHA256 signed payloads.
- Added Webhook event and signature headers.
- Webhook delivery occurs outside the public redirect critical path.
- External integration failures cannot prevent or delay normal visitor redirects.
- Added bounded asynchronous retry behavior.
- Added Webhook delivery and failure logging.
Google Analytics 4
- Added optional server-side GA4 Measurement Protocol forwarding.
- Supports Measurement ID and API secret configuration.
- Added BSM event names and routing metadata.
- GA4 delivery occurs outside the redirect critical path.
- GA4 failure is isolated from visitor routing.
- Privacy-sensitive routing information is not automatically forwarded as unrestricted raw data.
WP-CLI
- Added BSM Vanity URLs WP-CLI support.
- Added commands for:
- Status
- Route listing/inspection
- Health checks
- Route simulation
- JSON export
- Apache export
- Nginx export
- Import foundations
- WP-CLI functionality is conditionally registered and has no frontend dependency.
BSM JSON Export/Import
- Added versioned BSM-native JSON export format.
- Added workspace-aware export/import.
- Added validation for imported objects.
- Raw database IDs are not treated as authoritative identities when importing.
- Added explicit import conflict handling:
- Skip
- Create Inactive
- Replace
- Skip is the safe default.
- Replace requires explicit administrator confirmation.
- Replace creates a pre-import snapshot of the existing route.
- Existing configuration can be restored from the replacement snapshot.
- Import reports created, skipped, inactive, replaced, and failed records.
- Integration secrets and license credentials are excluded from normal exports.
Apache and Nginx Export
- Added static Apache redirect export.
- Added static Nginx redirect export.
- Only routing behavior that can be represented faithfully is exported.
- Dynamic behaviors that cannot safely be flattened are identified rather than silently approximated.
- Conditional routing, weighted/A/B routing, interstitial behavior, dynamic QR behavior, and other application-level routing can be omitted or flagged when static server configuration cannot preserve semantics.
- Export does not directly modify
.htaccessor server configuration.
Migration Foundation
- Added adapter-oriented migration foundation for external redirect systems.
- Migration workflow designed around:
Inventory → Import/Preflight → Validate → Administrator disables old engine - BSM does not automatically modify or deactivate competing redirect plugins.
Integration Diagnostics
- Added Integrations & Tools status information for Webhooks, GA4, WP-CLI, import/export capabilities, and redirect conflicts.
Technical
- Plugin version: 0.3.2
- Database schema: 0.3.2
- Licensing contract: v1
- Stable installed directory:
bsm-vanity-urls/
Version 0.3.1 — A/B & Weighted Routing
A/B and Weighted Routing
- Added Pro A/B and weighted routing for exact Vanity Links.
- Supports two or more destination variants.
- Explicit percentage weights must total 100%.
- Added sticky visitor assignment using an opaque first-party HTTP-only SameSite=Lax cookie.
- Sticky duration configurable from 1 to 365 days.
- Added optional experiment start/end scheduling.
- Added optional Campaign association.
- Campaign attribution is captured at event time.
- Added per-variant
weighted_matchanalytics. - Analytics retain route, variant, label, and configured weight.
- Added emergency per-variant Pause/Resume.
- Pausing a variant does not delete historical analytics.
- Added Draft, Active, and Paused route states.
- Route Simulator supports deterministic weighted selection.
Routing Precedence
- Existing exact Link, Conditional Rule, QR, and Regex behavior is preserved.
- Weighted selection applies to an exact Link after exact/conditional resolution and before interstitial/redirect delivery.
- Exact Links retain precedence over Regex fallback routes.
- Existing query-string merge behavior remains intact after variant selection.
Sticky Assignment
- Visitors remain assigned to the same eligible variant.
- Paused variants become immediately ineligible.
- Visitors assigned to a paused/ineligible variant are safely reassigned.
Health-Based Failover
- Added explicit health policy:
- Observe Only
- Failover
- Observe Only is the default.
- Observe Only never changes traffic based on destination health.
- Failover must be explicitly enabled.
- Destination-health results are cached for five minutes.
- Visitor requests do not execute synchronous HTTP health checks.
- Critical variants can be temporarily excluded when Failover is enabled.
- Remaining variant weights are redistributed proportionally.
- If all variants are unhealthy, BSM preserves configured routing instead of automatically taking the Link offline.
Safety
- At least two valid variants are required.
- Active weights must total exactly 100%.
- Only one weighted/A/B route may own a Link.
- Variant pause/resume and route changes are audited.
- Route simulation is side-effect free.
- Simulation does not set sticky cookies or create analytics events.
Technical
- Plugin version: 0.3.1
- Database schema: 0.3.1
- Licensing contract: v1
- Stable installed directory:
bsm-vanity-urls/
Version 0.3.0 — Advanced QR
QR Design Studio
- Added advanced QR design controls.
- Added configurable foreground and background colors.
- Added simple QR frame support.
- Added CTA label support.
- Added Media Library logo overlay support.
- Added configurable logo sizing.
- Existing QR assets remain legacy black/white unless deliberately redesigned.
QR Scanability Preflight
- Added QR encodability validation.
- Added four-module quiet-zone enforcement.
- Added foreground/background contrast calculation.
- Unsafe contrast combinations are rejected.
- Added error-correction validation.
- Added warnings for logo/error-correction combinations.
- Added oversized-logo warnings.
- Added module-count reporting.
- Added PASS/FAIL preflight result.
- Validator is intentionally conservative and does not claim to guarantee every physical scanner, printer, material, or environmental condition.
QR Lifecycle
- Added QR lifecycle states:
- Draft
- Tested
- In Production
- Archived
- Lifecycle is independent from routing status.
- Added physical-location metadata.
- Added production timestamp.
- Added Print Lock timestamp.
Print Lock
- Print Lock protects production QR identity.
- Locks:
- Encoded hostname
- QR route/key
- Encoded URL
- Route reservation
- Production design
- Destination remains editable after Print Lock.
- Print Lock validation is performed before locking.
- Normal Print Lock is not silently reversible; exceptional corrections should use an audited replacement/superseding identity.
QR Export
- Added bulk selected PNG ZIP export at 2048px.
- Added printable QR sheet containing QR name, encoded URL, and physical location.
- ZipArchive availability is surfaced when required.
- PNG/JPG styling supports raster logo overlays.
- SVG/EPS remain true vector exports.
- Raster logos are not embedded into SVG/EPS output.
Custom Domain Dependencies
- Custom-domain administration displays QR dependency counts.
- Displays Print-Locked dependency counts.
- Displays routing state.
- Domains with QR dependencies cannot be silently retired.
- Print-Locked QR assets protect their encoded hostname.
Compatibility
- Existing QR route/key, encoded URL, destination, workspace ownership, analytics, Campaign attribution, Print Lock, and branding state are preserved.
Technical
- Plugin version: 0.3.0
- Database schema: 0.3.0
- Licensing contract: v1
- Stable installed directory:
bsm-vanity-urls/
Version 0.2.9 — Business Search Manager Integration
Search-Powered 404 Recommendations
- Added optional integration with BSM Business Search Manager.
- Integration is OFF by default.
- No direct database-table coupling between Vanity URLs and Business Search Manager.
- Added formal provider/hook contract.
- Preferred integration hook:
bsmv_search_recommendations. - 404 Intelligence can request search-powered redirect recommendations.
- Candidate results can include:
- Canonical URL
- Title
- Content type
- Confidence
- Evidence
Safety
- Search recommendations never automatically create redirects.
- Administrator approval is required.
- Missing, disabled, or unsupported search providers fail gracefully.
- Existing 404 history remains preserved.
- Search Manager integration does not change normal routing when unavailable.
Technical
- Plugin version: 0.2.9
- Database schema: 0.2.9
- Licensing contract: v1
- Stable installed directory:
bsm-vanity-urls/
Version 0.2.8 — 404 Intelligence & Redirect Conflict Safety
404 Intelligence
- Added normalized 404 path grouping.
- Added hit counts.
- Added human/bot classification.
- Added first-seen and last-seen timestamps.
- Added last raw path/referrer information.
- Added Open, Ignored, and Resolved workflow.
- Added Ignore and Reopen actions.
- Added Create 301 Redirect from a 404 record.
- Creating a redirect preserves the original 404 history.
- Resolved 404 history is linked to the resulting BSM Link.
- Human traffic can be prioritized over bot noise.
Redirect Conflict Detection
- Added persistent non-dismissible red wp-admin warning when supported competing redirect engines are active.
- Detects Redirection.
- Detects Yoast SEO Premium Redirect Manager.
- Free/ordinary Yoast SEO does not trigger the warning.
- Detection is multisite aware for site-active and network-active plugins.
- Warning identifies the conflicting redirect environment.
- Warning disappears when the competing redirect engine is no longer active.
- BSM never automatically deactivates the competing plugin.
Diagnostics
- Added Redirect Environment diagnostics.
- Route Health reports conflict status.
- Route Simulator warns that another redirect engine may intercept the request first.
- 404 Intelligence warns that reporting can be incomplete while another redirect engine is active.
Advanced Routing Safety
- Added pre-activation checks for obvious self-referential loops.
- Added checks for unrestricted regex catch-all patterns.
Technical
- Plugin version: 0.2.8
- Database schema: 0.2.8
- Licensing contract: v1
- Stable installed directory:
bsm-vanity-urls/
Version 0.2.7 — Regex & Conditional Routing
Conditional Routing
- Added Pro Routing Rules management.
- Conditional routing can override an exact Link destination.
- Supported conditions include:
- Query parameters
- Login state
- WordPress role/capability
- Referrer
- Device class
- Cookies
- Hostname
- HTTP headers
- IP/CIDR
- Added Match ALL behavior.
- Added Match ANY behavior.
- Added ordered priority and activation/pause controls.
Regex Routing
- Added workspace-level Regex fallback routes.
- Regex rules run only after no exact Link matches.
- Added ordered Regex priority.
- Regex capture groups can be substituted into destinations using
$1,$2, etc. - Added bounded Regex validation and safe pattern evaluation.
Routing Precedence
- Exact Vanity Links retain precedence over Regex routes.
- Conditional rules attach to exact Links and can override their destination.
- Regex remains fallback routing.
Analytics and Simulation
- Added
conditional_matchanalytics events. - Added
regex_matchanalytics events. - Route Simulator uses the same evaluator as live routing.
- Simulator exposes rule-by-rule and condition-by-condition evaluation traces.
- Rule changes and activation state are audited.
Technical
- Plugin version: 0.2.7
- Database schema: 0.2.7
- Licensing contract: v1
- Stable installed directory:
bsm-vanity-urls/
Version 0.2.6 — Route Health & Route Simulator
Route Health
- Added dedicated Route Health administration.
- Added Healthy, Warning, and Critical health states.
- Added Needs Attention view.
- Added manual Check Now.
- Added scheduled daily health checks.
- Tracks:
- HTTP status
- Response latency
- Final destination
- Last checked time
- Detects:
- External destination failures
- HTTP 4xx/5xx responses
- Timeouts/network errors
- Redirect chains
- Redirect loops
- Missing Location headers
- Excessive redirect hops
- Self-referential Vanity Link loops
- WordPress path conflicts
- Branded QR hostname/route failures
- Custom-domain HTTPS/public reachability issues
- External 401/403 responses are treated as warnings rather than automatically declaring the destination broken.
- Health requests use a dedicated BSM health-check user agent.
- Health-check requests are excluded from normal visitor analytics.
Route Simulator
- Added side-effect-free route simulation.
- Simulator evaluates:
- Hostname
- Workspace
- Member namespace
- QR ownership
- Domain isolation
- Normalized slug
- Suspension state
- Route status
- Query-string merge behavior
- Simulation does not:
- Create analytics
- Generate Campaign attribution
- Execute visitor redirects
- Mutate Route Health state
Technical
- Added shared
BSMV_Healthservice. - Added
bsmv_healthdatabase storage. - Database schema updated to 0.2.6.
- Licensing contract remains v1.
- Stable installed directory remains
bsm-vanity-urls/.
Version 0.2.5 — Groups & Campaigns
Groups
- Added first-class Groups for organizing BSM assets.
- Each Link or QR asset can belong to one Group.
- Groups are workspace scoped.
- Group records include:
- Name
- Slug
- Description
- Status
- Creator
- Created/updated timestamps
- Added bulk Group assignment/removal.
- Archiving a Group unassigns its assets rather than deleting them.
- Legacy group-name data is migrated into the Group architecture.
Campaigns
- Added Campaigns as a separate operational/time-bound object.
- Campaigns are distinct from Groups.
- Campaigns support:
- Draft
- Active
- Paused
- Completed
- Added Campaign start/end dates.
- Added Campaign UTM defaults.
- Links and QR assets can participate in multiple Campaigns.
- Campaign membership uses many-to-many relationships.
Analytics
- Campaign attribution is captured at event time.
- Later Campaign membership changes do not rewrite historical analytics.
- Cross-workspace QR transfers clear current Group/Campaign membership where appropriate while preserving historical Campaign attribution.
Portal and Permissions
- Added workspace-aware Group/Campaign permissions for appropriate Portal roles.
UTM Safety
- Campaign UTM defaults do not mutate an asset's canonical shared destination because an asset may participate in multiple Campaigns.
Technical
- Database schema updated to 0.2.5.
- Licensing contract remains v1.
- Stable installed directory remains
bsm-vanity-urls/.
Version 0.2.4 — Initial Public Release
Initial Public Release
BSM Vanity URLs provides smart redirects, trackable links, dynamic QR infrastructure, workspaces, analytics, custom domains, branding controls, and an optional Pro self-service Link Portal for WordPress.
Vanity Links and Redirects
- Added branded Vanity URLs and redirect management.
- Supports 301, 302, 307, and 308 redirects.
- Added URL normalization.
- Normal Vanity Link matching is case-insensitive.
- Trailing slash variants resolve equivalently by default.
- Incoming query strings pass through by default.
- Query names and values are preserved.
- Configured destination parameters take precedence on collisions.
- Added workspaces, organizational grouping foundations, analytics, and interstitial-routing foundations.
Dynamic QR Infrastructure
- Added persistent dynamic QR assets.
- QR assets have immutable internal identities and persistent public routes.
- Destinations can be changed without changing the QR identity.
- Added QR scan analytics.
- Added Print Lock architecture.
- Added workspace ownership and transfer history.
- Added optional analytics-history transfer visibility.
- Generated QR routes and optional Vanity QR aliases are supported.
QR Rendering and Export
- Added local/native QR generation without requiring an external QR service.
- Added PNG and JPG export.
- Pro adds SVG and EPS true-vector export.
- Supports M, Q, and H error correction.
- Q is the default/recommended level.
QR Export Cache
- Added workspace-partitioned QR export cache.
- QR exports are temporary cache artifacts rather than permanent Media Library attachments.
- Seven-day retention is based on last access.
- Missing/expired exports regenerate from persistent QR configuration.
- Added scheduled cache cleanup.
- QR downloads use authorized BSM delivery rather than directly exposing cache files.
Workspaces and Portal
- Added Site, Personal, and Team workspace architecture.
- Added Portal plans.
- Added seat-aware invitations.
- Added workspace roles/capabilities.
- Added workspace switching.
- Added optional Pro Link Portal using WordPress authentication.
- Workspace Owner is the primary Portal workspace authority.
Custom Domains
- Added workspace custom domains.
- Added DNS TXT ownership verification.
- Added workspace-aware hostname routing.
- Custom-domain TLS provisioning remains dependent on hosting/CDN infrastructure.
Branding
- Added separate Brand Links and Brand QR Codes policies.
- Branded QR Codes are OFF by default.
- Enabling branded QR requires explicit, versioned and auditable risk acceptance.
- QR assets snapshot their encoded hostname and encoded URL.
- Later branding/domain changes never silently rewrite existing printed QR identities.
Emergency Routing Controls
- Workspace Owners can suspend existing branded Links or QR routes.
- Suspension requires impact review followed by typed destructive confirmation.
- Suspended routes return HTTP 410.
- Suspension preserves records, analytics, history, and configuration.
- WordPress administrators can recover suspended Portal workspace routing.
- Administrators can apply an administrative lock when supervisory control is required.
Maintenance
- Added scheduled maintenance for:
- Workspace expiration
- Invitation cleanup
- QR route/reservation safety
- QR export-cache cleanup
Licensing and Updates
- Added BSM shared licensing-client contract v1 architecture.
- Added Pro capability architecture.
- Added BSM Plugin Release Manager update integration.
- Added WordPress update checks.
- Added plugin-information integration.
- Added package URL handling.
- Added update diagnostics for last check, HTTP status, response, and API errors.
Technical
- Version 0.2.4 is the first public release.
- Versions 0.1.0 through 0.2.3 were internal development builds and are consolidated into this initial public release.
- Stable installed directory:
/wp-content/plugins/bsm-vanity-urls/ - Licensing contract: v1
0.2.4 — September 30, 2026
- Vanity redirects with 301/302/307/308 support, normalization, query-string passthrough, workspaces, groups, analytics, and interstitial routing foundations.
- Dynamic QR assets with persistent route identities, editable destinations, scan analytics, Print Lock, workspace ownership, transfer history, and optional analytics-history transfer visibility.
- Local QR image generation with PNG/JPG exports and Pro SVG/EPS true-vector exports; M/Q/H error correction with Q default.
- Workspace-partitioned QR export cache with seven-day last-access retention, authorized downloads, on-demand regeneration, and scheduled cleanup.
- Site, personal, and team workspace architecture with Portal plans, seat-aware invitations, roles/capabilities, and workspace switching.
- Optional Pro Link Portal using WordPress authentication and Workspace Owner authority.
- Custom domains with DNS TXT ownership verification and workspace-aware routing.
- Separate Brand Links and Brand QR Codes policies. Branded QR is off by default and requires versioned, auditable risk acceptance by the appropriate authority.
- QR assets snapshot their encoded hostname/URL so later branding or domain changes never silently rewrite printed QR identities.
- Emergency routing controls: Workspace Owners can immediately suspend existing branded Links or QR routes only after two warnings and typed destructive confirmation. Suspended routes return HTTP 410 while preserving records, analytics, history, and configuration.
- WordPress administrators can recover suspended Portal workspace routing and can apply an administrative lock when supervisory control is required.
- Daily maintenance for workspace expiration, invitation cleanup, QR reservation safety, and QR export-cache cleanup.
- BSM shared licensing client contract v1 architecture; Pro capability vanity.pro.
- BSM Plugin Release Manager auto-update integration using the canonical endpoint https://bsmstrategy.com/wp-json/bsm-updates/plugin/vanity-urls.
- WordPress update checks, plugin-information integration, package URL handling, and update diagnostics for last check, HTTP status, response, and API error.
- Stable internal plugin directory: /wp-content/plugins/bsm-vanity-urls/.
When the platform stops short, build the missing layer.
BSM Strategy connects systems, automates workflows, and builds practical software around the operational gaps off-the-shelf tools leave behind.
