Title: Plugnova Link Shortener &amp; QR
Author: plugnova
Published: <strong>August 21, 2026</strong>
Last modified: August 21, 2026

---

Search plugins

![](https://ps.w.org/plugnova-link-shortener-qr/assets/banner-772x250.png?rev=3658683)

![](https://ps.w.org/plugnova-link-shortener-qr/assets/icon-256x256.png?rev=3658683)

# Plugnova Link Shortener & QR

 By [plugnova](https://profiles.wordpress.org/plugnova/)

[Download](https://downloads.wordpress.org/plugin/plugnova-link-shortener-qr.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/plugnova-link-shortener-qr/#description)
 * [Reviews](https://wordpress.org/plugins/plugnova-link-shortener-qr/#reviews)
 *  [Installation](https://wordpress.org/plugins/plugnova-link-shortener-qr/#installation)
 * [Development](https://wordpress.org/plugins/plugnova-link-shortener-qr/#developers)

 [Support](https://wordpress.org/support/plugin/plugnova-link-shortener-qr/)

## Description

Plugnova Link Shortener & QR turns your WordPress site into a self-hosted link shortener
with your own domain. Every shortened link automatically gets a customizable QR 
code, and every click is recorded for detailed analytics — device, browser, operating
system, referrer, and UTM parameters — all stored in your own database, with no 
third-party tracking.

#### Link shortening & QR codes

 * Unlimited short links with random or custom slugs
 * Automatic QR code generation (PNG or SVG) with square/rounded/circle styles, 
   custom colors, and an optional brand-logo band
 * Optional caption text baked directly into the QR image (e.g. “Check Price on 
   Amazon”) — ideal for videos and thumbnails
 * Multi-destination URL rotation (Round Robin, Random, or Weighted Random) with
   per-destination analytics and an optional fallback URL
 * 301 / 302 / 307 redirect types
 * Password-protected links, expiration dates, and click limits
 * Geo (country) and device targeting rules — send visitors to different URLs based
   on where they are or what they’re using
 * Quick Add: paste a URL and press Enter to create a link instantly
 * Bulk actions: enable/disable, trash/restore/delete, regenerate QR, set category,
   add tag, export selected
 * Filters by status, category, tag, color label, favorite, link health, and creation
   date
 * Broken-link checker with a Smart Link Score — on-demand always, and on an optional,
   off-by-default daily schedule (see “External services” below)

#### Smart Bio Link pages

 * Link-in-bio landing pages at your own domain (`/bio/your-name`)
 * Drag-and-drop buttons, product-card buttons (image + text), link groups (accordions),
   and a social-icon row
 * Announcement bar, countdown timer, floating contact buttons, campaign scheduling,
   and per-button country/device visibility
 * Optional email-capture gate and password protection
 * Ready-made templates, one-click import/export, and a live preview while editing
 * Per-page and per-button analytics

#### Analytics & tools

 * Real-time click/view analytics: device, browser, OS, referrer (categorized), 
   and UTM breakdowns, with a date-range picker and optional bot inclusion
 * QR-scan vs. direct-traffic split
 * Offline GeoIP country detection — visitor IPs never leave your server
 * Bot/crawler filtering — link-preview and search-engine bots are excluded from
   counts
 * Keyword auto-linking — automatically link chosen keywords in your post content
 * Activity Log audit trail, Database Repair Tool, and a System Health checker
 * Full REST API (`/wp-json/qlqr/v1/`) secured with capability checks and rate limiting
 * Shortcodes: `[qlqr]`, `[qlqr_qr]`, `[qlqr_button]`, `[qlqr_stats]`
 * Bulk CSV import and migration from Pretty Links / ThirstyAffiliates
 * CSV export of links and of analytics

#### Privacy

 * IP addresses are never stored — only a salted, one-way SHA-256 hash
 * No per-visitor external requests; all redirects, QR generation, and geolocation
   happen on your own server
 * Clean uninstall routine with opt-in data removal

### External services

This plugin relies on three external services, detailed below.

**Freemius (licensing and update SDK)**

This plugin uses the Freemius SDK to manage plugin updates, licensing for the premium
version,
 and (only if you opt in) anonymous usage data used to improve the plugin
and offer support.

On activation, an administrator is shown a one-time opt-in screen asking permission
to connect the
 site to Freemius. Connecting sends non-sensitive data such as this
site’s URL, admin email, WordPress and PHP versions, and this plugin’s version —
never post content, visitor data, or link/analytics data stored by this plugin. 
An administrator may skip connecting; the plugin remains fully usable, and Freemius
still performs basic update checks for the plugin itself.

 * Service: Freemius, https://freemius.com/
 * Terms of use: https://freemius.com/terms/
 * Privacy policy: https://freemius.com/privacy/

**GeoIP country dataset (npm registry)**

This service is used to power the optional, offline “Top Countries” analytics report.
The plugin
 downloads a public IP-to-country dataset once and looks up visitor countries
locally afterwards — no per-visitor lookup is ever sent anywhere.

This service is called only when a site administrator clicks “Download / Update 
Database” on the
 Settings screen. It is never called automatically, on a schedule,
or in response to a visitor. If that button is never clicked, this plugin makes 
no request to this service at all, and the Top Countries report simply stays empty.

What is sent: a plain package-download request for the `@ip-location-db/asn-country`
package —
 no visitor data, IP address, or site data of any kind.

The dataset itself is released into the public domain (CC0) by the ip-location-db
project:
 https://github.com/sapics/ip-location-db

 * Service: npm registry, https://registry.npmjs.org/
 * Terms of use: https://docs.npmjs.com/policies/terms
 * Privacy policy: https://docs.npmjs.com/policies/privacy

**Link destination check (broken-link checker)**

This service check is used to tell you whether a short link’s own destination is
still online. The
 “destination” is whichever URL you yourself configured as a link’s
target when creating it — this plugin does not call any single fixed third-party
service for this feature, but rather whatever destination URLs you have added.

This is off by default. It is called only when a site administrator either clicks“
Check All Links”
 on the Links screen (a one-time, on-demand check), or turns on“
Automatically check for broken links” on the Settings screen (a daily scheduled 
check, which can be turned off again at any time). It is never called automatically
before that setting is turned on, and never in response to a visitor.

What is sent: a standard HTTP GET request to the destination URL, with a generic
User-Agent string
 identifying the plugin (no site-identifying information, such
as this site’s own URL, is included). No visitor data is ever sent.

If the setting is never turned on and “Check All Links” is never clicked, this plugin
makes no such
 request at all.

If you never click that button and never turn the setting on, the plugin makes no
such requests at all.

### Support

For bug reports, questions and feature requests, please use the
 support forum for
this plugin on WordPress.org.

## Installation

 1. Upload the `plugnova-link-shortener-qr` folder to `/wp-content/plugins/`, or install
    it from the Plugins screen.
 2. Activate the plugin through the ‘Plugins’ menu in WordPress.
 3. Go to Plugnova Link Shortener & QR > Settings to configure your URL prefix and 
    QR defaults.
 4. Go to Plugnova Link Shortener & QR > Links to create your first short link.

## FAQ

### Where are QR codes stored?

Generated QR images are saved to `wp-content/uploads/plugnova-link-shortener-qr/`.

### Are visitor IP addresses stored?

No. Only a one-way SHA-256 hash (salted with your site’s AUTH_SALT) is stored, so
individual visitors cannot be identified or tracked across sites.

### Does this require any external services?

No per-visitor external calls are ever made. The only external request is optional
and admin-triggered — see the “External services” section above for the GeoIP country
dataset download.

### How does password protection remember a visitor?

When a visitor enters the correct password for a link or bio page, the plugin sets
a signed, HTTP-only cookie (keyed with your site’s secret salt) so they aren’t re-
prompted on the next view. It does not use PHP sessions. Changing a link’s password
automatically invalidates existing unlock cookies.

### Why does this need PHP 8.1?

The plugin’s data objects are built on readonly properties, which PHP added in 8.1.
They are what guarantee a link, click or bio page cannot be altered after it has
been loaded from the database — the safety that lets the rest of the code stay simple.
Supporting 8.0 would mean giving that up throughout.

PHP 8.0 and everything before it reached end of life some time ago and no longer
receive security fixes, so 8.1 is a floor rather than a stretch. Most managed WordPress
hosts default to 8.1 or newer; if yours is older, your host can usually switch the
version from your control panel in a click.

### Will short links work on my host?

Short links and bio pages rely on WordPress pretty permalinks. If your Permalinks
setting is “Plain”, set it to any other option. The built-in System Health checker(
Settings tab) flags this and other common hosting issues for you.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Plugnova Link Shortener & QR” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ plugnova ](https://profiles.wordpress.org/plugnova/)
 *   [ Freemius ](https://profiles.wordpress.org/freemius/)

[Translate “Plugnova Link Shortener & QR” into your language.](https://translate.wordpress.org/projects/wp-plugins/plugnova-link-shortener-qr)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/plugnova-link-shortener-qr/),
check out the [SVN repository](https://plugins.svn.wordpress.org/plugnova-link-shortener-qr/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/plugnova-link-shortener-qr/)
by [RSS](https://plugins.trac.wordpress.org/log/plugnova-link-shortener-qr/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.0

 * Initial release.
 * Link shortening with random or custom slugs, 301/302/307 redirects, password 
   protection, expiry dates and click limits.
 * Automatic QR codes (PNG or SVG) with square/rounded/circle styles, custom colours,
   an optional brand-logo band and baked-in caption text.
 * Multi-destination rotation (round robin, random, weighted random) with per-destination
   analytics and a fallback URL.
 * Geo and device targeting rules, backed by an offline IP-to-country database you
   install with one click.
 * Smart Bio Link pages: drag-and-drop buttons, product cards, link groups, social
   row, announcement bar, countdown timer, floating contact buttons, campaign scheduling,
   email capture, password protection, themes and live preview.
 * Click and view analytics: charts over time, device/browser/OS/country/referrer/
   UTM breakdowns, unique and bot-filtered counts, QR-scan vs. direct split, and
   CSV export.
 * Keyword auto-linking, broken-link checker with a Smart Link Score, and a live
   destination preview.
 * Bulk CSV import plus migration from Pretty Links and ThirstyAffiliates.
 * Activity Log audit trail, Database Repair Tool and System Health checker.
 * REST API under /wp-json/qlqr/v1/ and the [qlqr], [qlqr_qr], [qlqr_button], [qlqr_stats],[
   qlqr_bio] and [qlqr_bio_qr] shortcodes.

## Meta

 *  Version **1.0.0**
 *  Last updated **2 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.8 or higher **
 *  Tested up to **7.0.4**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [affiliate links](https://wordpress.org/plugins/tags/affiliate-links/)[bio link](https://wordpress.org/plugins/tags/bio-link/)
   [link cloaking](https://wordpress.org/plugins/tags/link-cloaking/)[qr code](https://wordpress.org/plugins/tags/qr-code/)
   [url shortener](https://wordpress.org/plugins/tags/url-shortener/)
 *  [Advanced View](https://wordpress.org/plugins/plugnova-link-shortener-qr/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/plugnova-link-shortener-qr/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/plugnova-link-shortener-qr/reviews/)

## Contributors

 *   [ plugnova ](https://profiles.wordpress.org/plugnova/)
 *   [ Freemius ](https://profiles.wordpress.org/freemius/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/plugnova-link-shortener-qr/)