=== JS Links - SEO Link Obfuscation ===
Contributors: pierreseo
Tags: seo, links, obfuscation, internal-linking, accessibility
Requires at least: 5.9
Tested up to: 6.8
Stable tag: 2.0.0
Requires PHP: 7.4
License: GPL-2.0+
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Hide specific links from crawlers without breaking design or accessibility. Lightweight, reversible, and SEO-safe.

== Description ==

**JS Links** lets you obfuscate links so crawlers can’t follow them — while users still can.  
It replaces `<a>` tags with accessible `<span>` elements (`role="link"`, `tabindex="0"`) containing Base64-encoded URLs.

✅ **Use cases**
- Hide links to legal pages, login, or affiliate URLs  
- Prevent PageRank dilution in footers or widgets  
- Keep a clean, SEO-friendly internal linking structure  

✅ **Key features**
- Lightweight, no external calls or tracking  
- 100 % reversible (disable = restores original links)  
- Works with all SEO plugins (Yoast, Rank Math, SEOPress)  
- Compatible with any theme or builder  
- Accessible (keyboard navigation supported)  
- Optionally disable obfuscation on specific pages  
- Custom CSS styling per area (content, menu, footer, widget)  

✅ **Why not just use `nofollow`?**  
Because `nofollow` links are still visible to crawlers and can leak PageRank.  
JS Links removes the `href` entirely and hides the destination — Google can’t see it, so no PageRank flows.

✅ **Safe and compliant**
JS Links follows WordPress coding standards and includes:
- URL sanitization (`esc_url_raw()`)
- Output escaping (`esc_attr()`, `wp_kses_post()`)
- CSS filtering (`safecss_filter_attr()`)
- Protection against reverse tabnabbing (`noopener noreferrer`)

🧠 *Result: total control of your internal link flow, with zero impact on UX.*

---

== Description (FR) ==

**JS Links** permet d’obfusquer certains liens pour empêcher Google et les robots d’exploration de les suivre — tout en conservant un comportement identique pour l’utilisateur.  
Les balises `<a>` sont remplacées par des `<span>` cliquables (`role="link"`, `tabindex="0"`) contenant l’URL encodée en Base64.

✅ **Cas d’usage**
- Empêcher la transmission de PageRank sur les liens non stratégiques (CGU, mentions légales, etc.)  
- Bloquer les liens d’affiliation ou externes sans casser le design  
- Préserver un maillage interne propre et hiérarchisé  

✅ **Fonctionnalités**
- Ultra-léger et 100 % réversible  
- Compatible avec tous les thèmes et plugins SEO  
- Accessible au clavier  
- Personnalisation visuelle simple (CSS par zone)  
- Exclusion possible de certaines pages  

✅ **Différence avec `nofollow`**  
Un lien `nofollow` reste une balise `<a>` visible par Google.  
JS Links, lui, supprime l’attribut `href` et encode l’URL — donc **Google ne voit pas le lien.**

✅ **Sécurité**
JS Links respecte les bonnes pratiques WordPress :
- Nettoyage et validation des URLs  
- Échappement systématique des sorties  
- Filtrage CSS sécurisé  
- Protection contre le reverse tabnabbing  
- Fallback sans JavaScript (`<noscript>`)  

🧠 *En clair : tu gardes ton jus SEO sans sacrifier ton ergonomie.*

---

== Installation ==

1. Upload the `js-links` folder to `/wp-content/plugins/`
2. Activate the plugin through the “Plugins” menu in WordPress
3. In the Gutenberg editor, use the **JS Link** button.
4. For menus, a dedicated field is available under *Appearance > Menus*.

---

== Frequently Asked Questions ==

= How is this different from rel="nofollow"? =
A `nofollow` link is still a visible `<a>` tag and may leak PageRank.  
JS Links removes the `href` attribute and encodes the URL — Google doesn’t follow it.

= Is it compatible with SEO plugins like Yoast, Rank Math, or SEOPress? =
Yes. JS Links runs after SEO plugins and doesn’t interfere with their output.

= Is it accessible? =
Yes — links are fully keyboard-activable (`Enter` / `Space`) via `role="link"` and `tabindex="0"`.  
However, some screen readers that only list real `<a>` links may skip them.  
We recommend not obfuscating critical navigation or accessibility links.

= Can I exclude specific pages? =
Yes, by listing their relative URLs (e.g., `/`, `/contact`, `/legal`) in the exclusion field.

---

== Screenshots ==

1. Gutenberg “JS Link” button  
2. Menu link exclusion field  
3. Visual customization options (color, hover, expert mode)

---

== Changelog ==

= 2.0.0 =
* Initial WordPress.org release
* WP 6.8 compatibility / PHP 7.4+
* Improved accessibility and sanitization

---

== Upgrade Notice ==

= 2.0.0 =
Initial release of JS Links — hide links from crawlers safely and easily.

---

== Credits ==
Developed and maintained by [Pierre Ribeaucourt](https://ribeaucourt.fr)

---

== Support ==
If you encounter any issues or have suggestions, feel free to open a thread on the [Support Forum](https://wordpress.org/support/plugin/js-links/).
