{"id":391945,"date":"2026-10-27T00:08:31","date_gmt":"2026-10-27T00:08:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/yem-links\/"},"modified":"2026-10-27T00:08:16","modified_gmt":"2026-10-27T00:08:16","slug":"yem-links","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/yem-links\/","author":23583983,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Yem Links","header_author":"YemLogic","header_description":"Create and manage short links with bot-filtered click counts and built-in link health checking. Uses custom database tables and fires redirects before your theme loads.","assets_banners_color":"4c6762","last_updated":"2026-10-27 00:08:16","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/yemlogic.com\/yem-links","header_author_uri":"https:\/\/yemlogic.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":53,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"yemlogic","date":"2026-10-27 00:08:16","revision":3767529}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3767529,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3767529,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3767529,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3767529,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"yem-links\/link":{"name":"yem-links\/link","title":"Link"}},"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3767529,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3767529,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3767529,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3767529,"resolution":"4","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"The links dashboard, with live search, filtering and click counts at a glance.","2":"Creating a link in the slide-over panel, without leaving the list.","3":"Settings: base prefix, SEO attributes, bot filtering and data management.","4":"Tools: the bookmarklet and the bulk link health check."}},"plugin_section":[],"plugin_tags":[5362,7182,175,727,5364],"plugin_category":[],"plugin_contributors":[288807],"plugin_business_model":[],"class_list":["post-391945","plugin","type-plugin","status-publish","hentry","plugin_tags-affiliate-links","plugin_tags-link-tracking","plugin_tags-links","plugin_tags-redirect","plugin_tags-short-links","plugin_contributors-yemlogic","plugin_committers-yemlogic"],"banners":{"banner":"https:\/\/ps.w.org\/yem-links\/assets\/banner-772x250.png?rev=3767529","banner_2x":"https:\/\/ps.w.org\/yem-links\/assets\/banner-1544x500.png?rev=3767529","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/yem-links\/assets\/icon-128x128.png?rev=3767529","icon_2x":"https:\/\/ps.w.org\/yem-links\/assets\/icon-256x256.png?rev=3767529","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/yem-links\/assets\/screenshot-1.png?rev=3767529","caption":"The links dashboard, with live search, filtering and click counts at a glance."},{"src":"https:\/\/ps.w.org\/yem-links\/assets\/screenshot-2.png?rev=3767529","caption":"Creating a link in the slide-over panel, without leaving the list."},{"src":"https:\/\/ps.w.org\/yem-links\/assets\/screenshot-3.png?rev=3767529","caption":"Settings: base prefix, SEO attributes, bot filtering and data management."},{"src":"https:\/\/ps.w.org\/yem-links\/assets\/screenshot-4.png?rev=3767529","caption":"Tools: the bookmarklet and the bulk link health check."}],"raw_content":"<!--section=description-->\n<p>Yem Links turns long URLs into clean short links on your own domain, then tells you the truth about what happens to them.<\/p>\n\n<p>Two things set it apart from other link managers.<\/p>\n\n<p><strong>Your click counts exclude bots.<\/strong> Googlebot, Bingbot, AhrefsBot, SemrushBot, GPTBot and more than 25 other crawlers and link-preview bots hit your links constantly. Most link plugins count every one of those as a click, so the numbers you use to judge a placement are inflated by traffic that was never going to convert. Yem Links filters them out before the counter increments.<\/p>\n\n<p><strong>Broken destinations surface before your visitors find them.<\/strong> Merchants retire products and change URLs without warning. The built-in health check tests every destination and reports the HTTP status, so you find the dead link instead of your readers finding it.<\/p>\n\n<h4>Built for speed<\/h4>\n\n<p>Links live in two dedicated database tables indexed on the slug, not in wp_posts or wp_options. Redirects fire on <code>plugins_loaded<\/code> at priority 1, before your theme loads and before WordPress runs its main query. The front-end lookup is cached in the object cache, so on sites running Redis or Memcached a redirect often never touches the database at all.<\/p>\n\n<h4>What you get<\/h4>\n\n<ul>\n<li>301, 302 and 307 redirects<\/li>\n<li>A configurable base prefix: \/go\/, \/out\/, \/recommends\/, or anything you choose<\/li>\n<li>Custom slugs, categories and tags<\/li>\n<li>Automatic title fetching when you paste a URL<\/li>\n<li>One-click copy for every short link<\/li>\n<li>Bot-filtered click counts<\/li>\n<li>Link health checking, one link at a time or all at once<\/li>\n<li>Per-link nofollow and sponsored attributes, ticked for new links by default if you choose<\/li>\n<li>A Gutenberg block with search, so you can insert links while writing<\/li>\n<li>A browser bookmarklet for creating links from any page<\/li>\n<li>A REST API at \/wp-json\/yem-links\/v1\/ for programmatic management<\/li>\n<li>A dashboard with live search, filtering and slide-over editing<\/li>\n<\/ul>\n\n<p>Everything above is free, with no account, no key and no feature gates.<\/p>\n\n<p>Need geo and device targeting, click analytics, keyword auto-linking or A\/B split tests? The separate <a href=\"https:\/\/yemlogic.com\/yem-links-pro\/\">Yem Links Pro<\/a> add-on adds them, free with a YemLogic account.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In your WordPress admin, go to Plugins, then Add New Plugin, and search for \"Yem Links\".<\/li>\n<li>Click Install Now, then Activate. (Or upload the zip file under Plugins, then Add New Plugin, then Upload Plugin.)<\/li>\n<li>Open <strong>Yem Links<\/strong> in the admin menu and click <strong>Add New Link<\/strong>.<\/li>\n<li>Paste a destination URL. The slug and title fill in automatically; adjust them if you like, then save.<\/li>\n<\/ol>\n\n<p>Your link is live immediately at <code>yoursite.com\/go\/your-slug\/<\/code>. To change the <code>\/go\/<\/code> prefix, go to Yem Links, then Settings.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20slow%20down%20my%20site%3F\"><h3>Will this slow down my site?<\/h3><\/dt>\n<dd><p>No. Redirects are handled on <code>plugins_loaded<\/code> at priority 1, which runs before your theme loads and before WordPress builds its main query. The slug lookup is a single indexed query, and it is cached in the object cache after the first hit.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20%2Fgo%2F%20prefix%3F\"><h3>Can I change the \/go\/ prefix?<\/h3><\/dt>\n<dd><p>Yes. Go to Yem Links, then Settings, and set the base slug to anything you want. Existing links keep working under the new prefix right away, and links inserted with the Yem Link block update automatically.<\/p><\/dd>\n<dt id=\"why%20are%20my%20click%20counts%20lower%20than%20my%20analytics%20tool%20reports%3F\"><h3>Why are my click counts lower than my analytics tool reports?<\/h3><\/dt>\n<dd><p>Because Yem Links excludes known bots. Search engine crawlers, SEO tools and AI scrapers hit links constantly, and counting them gives you an inflated number. You can turn bot filtering off in Settings if you prefer raw hits.<\/p><\/dd>\n<dt id=\"does%20yem%20links%20send%20data%20to%20yemlogic%20or%20anyone%20else%3F\"><h3>Does Yem Links send data to YemLogic or anyone else?<\/h3><\/dt>\n<dd><p>No. There is no tracking and no account, and the plugin never contacts YemLogic or any other service. The only outside requests it makes go to the destination URLs you add yourself: once to fetch the page title when you paste a URL, and when you run a health check. Clicks are counted on your own site, and for each link the plugin stores the number of clicks and the time of the last one, not who clicked.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20affiliate%20links%3F\"><h3>Does it work with affiliate links?<\/h3><\/dt>\n<dd><p>Yes. Tick nofollow and sponsored on each link, or choose in Settings to have them ticked for every new link, so your outbound affiliate links carry the attributes search engines expect.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20links%20if%20i%20deactivate%20the%20plugin%3F\"><h3>What happens to my links if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>Nothing. Your data stays in the database and reappears when you reactivate. Deleting the plugin only removes your data if you opt in first, using the toggle in Settings under Data Management.<\/p><\/dd>\n<dt id=\"can%20i%20create%20links%20without%20leaving%20the%20page%20i%20am%20on%3F\"><h3>Can I create links without leaving the page I am on?<\/h3><\/dt>\n<dd><p>Yes, two ways. Inside the editor, use the Yem Link block to search your links and insert one. Anywhere else on the web, use the bookmarklet from the Tools page; it opens the Add New Link panel with the page's address and title already filled in.<\/p><\/dd>\n<dt id=\"does%20it%20work%20if%20wordpress%20is%20installed%20in%20a%20subfolder%3F\"><h3>Does it work if WordPress is installed in a subfolder?<\/h3><\/dt>\n<dd><p>Yes. Short links work on sites installed in a subfolder such as example.com\/blog\/, and the prefix is matched case-insensitively.<\/p><\/dd>\n<dt id=\"is%20there%20a%20rest%20api%3F\"><h3>Is there a REST API?<\/h3><\/dt>\n<dd><p>Yes, at <code>\/wp-json\/yem-links\/v1\/links<\/code>. It supports listing, creating, updating and deleting, and requires the <code>manage_options<\/code> capability.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>All functions, classes, constants, options, hooks and AJAX actions now use the yem_links prefix (Yem_Links_ for classes, YEM_LINKS_ for constants). Settings saved by 1.0.0 move to the new option names automatically on update.<\/li>\n<li>The REST API is now at \/wp-json\/yem-links\/v1\/.<\/li>\n<li>Add-on hooks no longer receive request data: yem_links_save_link_data gets the sanitized link data and the link ID, and yem_links_save_settings fires without arguments.<\/li>\n<li>REST API input is sanitized field by field when it arrives.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<li>Click data passed to add-ons uses WordPress's own IP anonymisation (IPv6 addresses now lose their last 64 bits, not 16), and anything that isn't a valid IP address is stored as 0.0.0.0.<\/li>\n<li>Settings refuses base slugs that WordPress itself needs, such as wp-admin, wp-json and feed.<\/li>\n<li>The REST API returns at most 100 links per page.<\/li>\n<li>The edit panel shows the link's ID in its title, for the Pro product box shortcode and the REST API.<\/li>\n<li>A category longer than 100 characters or tags longer than 255 characters get a clear message instead of a database error.<\/li>\n<li>A new category is added to the category filter as soon as you save the link, without reloading the page.<\/li>\n<\/ul>\n\n<h4>0.9.9<\/h4>\n\n<ul>\n<li>Bot filtering now also recognises Applebot, PerplexityBot, CCBot, Amazonbot, OAI-SearchBot, meta-externalagent and the link-preview bots of X (Twitter), Slack, LinkedIn, WhatsApp, Discord and Telegram.<\/li>\n<li>The single-link health check shows the real status code (for example OK (301)) and says Unreachable when a destination doesn't answer.<\/li>\n<li>Short links with an extra path segment, such as \/go\/a\/b\/, now return a 404 instead of being matched to the slug \"ab\".<\/li>\n<li>Settings: the nofollow and sponsored options are labelled for what they do: they tick the boxes for new links.<\/li>\n<\/ul>\n\n<h4>0.9.8<\/h4>\n\n<ul>\n<li>Pre-release testing build.<\/li>\n<\/ul>","raw_excerpt":"Short links with bot-filtered click counts and built-in link health checking. Custom tables, redirects fire before your theme loads.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/391945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=391945"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/yemlogic"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=391945"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=391945"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=391945"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=391945"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=391945"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=391945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}