=== icomm site health ===
Contributors: icomm systems
Tags: health, broken links, security, seo, monitoring
Requires at least: 5.8
Tested up to: 6.8
Requires PHP: 7.4
Stable tag: 1.12.76
License: GPLv2 or later

Monitor broken links and **privacy compliance** (policy/terms visibility, trackers/pixels, and CMP effectiveness), plus WordPress errors, REST API issues, SEO problems, security risks and overall website health - from one dashboard with a prioritized improvement plan and one-click fixes.

== Description ==

Privacy is critical for most websites. icomm site health includes a practical privacy risk scan that helps you verify the basics quickly (policy/terms pages and link visibility), detect trackers/pixels, and assess whether your cookie consent banner (CMP) actually blocks scripts before consent.

From settings you can inject Google Analytics or Tag Manager, Meta Pixel (Facebook and Instagram), Google Ads, and TikTok, and send a Lead after a successful form. Leave a field empty if that tag already runs elsewhere.

= Free tier =

* **Dashboard** - Site Score (0–100) aligned with the improvement plan.
* **Scan center** - Full link scan, privacy scan, refresh health/plan.
* **Findings** - Broken links, WordPress health, security, privacy, performance and SEO issues are listed.
* **Improvement plan** - All open findings. One-click fixes need a license.
* **Broken links** - Posts, pages, menus, widgets, Elementor `_elementor_data`, WooCommerce; batched scan with progress; up to 400 links per scan in free mode.

= PRO (license required) =

* **One-click fixes** - Security headers, security.txt, XML-RPC, robots, Elementor link fixes, mixed content, and similar actions.
* **Privacy deep tools** - Flag-by-flag mixed-content fix after the scan.
* **Security fixes** - One-click headers, security.txt, XML-RPC, uploads index, generator hide, and similar actions after the free scan.
* **Performance tools** - Built-in HTML page cache (on/off, safe purge) and Google PageSpeed Insights (mobile + desktop) with API key.
* **SEO fixes** - One-click robots.txt, thin-archive noindex, shortlink/oEmbed removal, Elementor link and accessible-name fixes.
* **Automation** - Hourly/weekly link scans (vs daily free), email alerts, branded client reports (visit, open status, monthly summary), CSV export.
* **Licensing** - license.icomm.systems; automatic updates like other icomm plugins.

= Works well with =

* LiteSpeed Cache / other cache plugins (performance).
* icomm Image Optimizer (WebP / LCP).
* Yoast, Rank Math, SEOPress, AIOSEO (respects noindex pages in content checks).

= Not a replacement for =

* JS/CSS deferral (use LiteSpeed Cache, Autoptimize, etc.).
* External backlink metrics (TF/DA) - authority API module is planned.

== Uploading ZIP to license server ==

Some firewalls (ModSecurity) block browser uploads whose filename contains `site-health`.
If icomm WP File Manager shows "Connection error or request blocked", either:
1. Rename the file to `icomm-sh-1.0.3.zip` before upload, then rename on server to `icomm-site-health.zip`, or
2. Upload via SFTP to the `downloads` folder, or
3. Use icomm WP File Manager PRO 2.1.12+ (ZIP uploads use base64 to bypass firewall).

== Shortcode (public plugin details) ==

Embed the same «Details» page on any post or page (no login required):

`[icomm_site_health_details]`

Alias: `[icomm_sh_details]`

Use on your product landing page (e.g. icomm.market) while the plugin is active on that site.

== Installation ==

1. Upload `icomm-site-health` to `/wp-content/plugins/`
2. Activate through the Plugins menu
3. Open **icomm site health** in the admin menu
4. Enter your license key under Settings (optional; free tier works without a key)

== License server ==

Create product slug `icomm-site-health` on the icomm license server before distributing PRO keys.

== Changelog ==

= 1.12.76 =
* A full scan checks every link found on the site. It does not stop after a fixed number.

= 1.12.75 =
* A link whose address is pasted twice is listed as broken, even when the site has many other links.

= 1.12.74 =
* A link whose address is pasted twice is listed as broken.

= 1.12.73 =
* A link that sends the visitor to the homepage, instead of its own page, is listed as broken.

= 1.12.72 =
* A link written without a leading slash is checked the way a browser opens it, including text in other languages. If that address opens under the current page and does not exist, it is listed as broken.

= 1.12.71 =
* The dashboard opens cleanly. Broken-link groups stay in the improvement plan.

= 1.12.70 =
* The improvement plan splits broken links into groups. A missing picture copy is pointed at the file that loads, in one click. A file missing in every format is removed in one click. Other addresses stay with an explanation, without deleting the whole list.

= 1.12.69 =
* An http:// address on an HTTPS site, including the old theme profile link, now appears in the improvement plan with a one-click fix or clear steps.

= 1.12.68 =
* The button for an image without alt selects its frame in the editor, and the image is inside that frame.

= 1.12.67 =
* The image-without-alt row shows the Elementor element id from the page content, and opens that element.

= 1.12.66 =
* The image-without-alt row opens the page or template where that image is saved, and saving in Image Optimizer writes the alt there.

= 1.12.65 =
* An image that is on the page but not in the media library is no longer sent to a media search that comes up empty.

= 1.12.64 =
* The touch-target row in the improvement plan lists which links and buttons are too small.

= 1.12.63 =
* The improvement plan shows where each homepage H1 sits, and a link without a name shows the element Google found.

= 1.12.62 =
* After hiding the WordPress version or adding the skip-to-content link, the page cache is cleared so the external check sees the updated page.

= 1.12.61 =
* WordPress version exposure and the skip-to-content link show in the improvement plan, with a one-click fix.

= 1.12.60 =
* A link that opens is not kept on the broken-link list.

= 1.12.59 =
* The speed check keeps running until a score comes back.

= 1.12.58 =
* If a speed check stays on running, opening the page continues it and updates the score.

= 1.12.57 =
* The speed check continues on its own while a link scan is running, and updates the score without asking you to start it again.

= 1.12.56 =
* The improvement plan opens after a row is marked handled.

= 1.12.55 =
* A robots.txt rule that blocks the whole site is removed in one click.

= 1.12.54 =
* An Analytics record removed by mistake is restored. One-click delete now removes only that old record, and only when MonsterInsights is not active.

= 1.12.53 =
* An old Analytics tag left by MonsterInsights shows where it is stored, and can be deleted in one click when that plugin is not installed.

= 1.12.52 =
* An image whose file is not on the server no longer stays in the improvement plan.

= 1.12.51 =
* When an image with an empty alt is also missing from the server, the improvement plan asks you to replace it on the page.

= 1.12.50 =
* An image the page shows with an empty alt opens AI Alt. Saving there writes the text onto the page.

= 1.12.49 =
* A document shown as an image, such as a PDF, is sent to the page editor. The alt scan in Image Optimizer fills images the page still shows with an empty alt.

= 1.12.48 =
* The improvement plan lists a pixel, such as TikTok, when it is active and not named in the privacy policy.

= 1.12.47 =
* The improvement plan names the page and the headings when heading order skips, and names the link when its text is vague.

= 1.12.46 =
* The privacy policy check recognizes common Hebrew wording for third-party sharing and for how long data is kept.

= 1.12.45 =
* Bing Webmaster Tools can be marked as verified, the same way as Google.

= 1.12.44 =
* The REST card shows OK when the WordPress editor can use it.

= 1.12.43 =
* The dashboard shows the site score, Google readiness, and the REST check right away.

= 1.12.42 =
* The dashboard keeps the score, server type, and the other boxes while the plan refreshes.

= 1.12.41 =
* Work through several rows in the improvement plan. A handled row stays marked until you refresh the plan.

= 1.12.40 =
* Security improvements.

= 1.12.39 =
* More reliable installation.

= 1.12.38 =
* Admin titles now show icomm site health PRO.

= 1.12.37 =
* Create a public security.txt file in one click.

= 1.12.36 =
* One-click complete accessible names for icon-only links, including Elementor menus.

= 1.12.35 =
* More stable link scans.

= 1.12.34 =
* English plugin details on English store pages.

= 1.12.33 =
* Stability improvements in the WordPress admin dashboard.

= 1.12.32 =
* Public readme.html is blocked on LiteSpeed at the real URL, so the plan row can clear.

= 1.12.31 =
* Blocking public readme.html now works when LiteSpeed serves the file directly.

= 1.12.30 =
* The wait message during a speed check is easier to see, so another check is not started mid-run.

= 1.12.29 =
* Leftover Analytics snippets from a removed plugin can be deleted from the plan. They do not appear in Plugins.

= 1.12.28 =
* Extra Analytics tags open the real snippet screen, not WordPress general settings.

= 1.12.27 =
* The improvement plan lists the exact place of extra Analytics tags, with a link to that screen.

= 1.12.26 =
* Broken links are grouped by destination, with a clear recommendation. A server error is not treated as a missing page.

= 1.12.25 =
* License server connection is checked automatically after install.

= 1.12.24 =
* Unnecessary notices were removed from the improvement plan. One-click fixes refresh the list.

= 1.12.23 =
* The improvement plan updates right after a one-click fix.

= 1.12.22 =
* Save button next to the license field in settings.

= 1.12.21 =
* Tracking tags (Google, Meta, TikTok) and Lead after a form require a license.

= 1.12.20 =
* The improvement plan is built in one pass and shows findings without extra refreshes.

= 1.12.19 =
* Free install lists scan findings. One-click fixes require a license.

= 1.12.18 =
* Logo and version once at the top of admin screens.

= 1.12.17 =
* Download button on the details page.

= 1.12.16 =
* icomm logo in the details header.

= 1.12.15 =
* Product logo in the admin menu and on plugin screens.

= 1.12.14 =
* Product logo in the details header.

= 1.12.13 =
* Clearer layout on client reports.

= 1.12.12 =
* Clearer layout on client reports.

= 1.12.11 =
* Clearer layout on client reports.

= 1.12.10 =
* Clearer layout on client reports.

= 1.12.9 =
* Updated report logo, larger on screen and in PDF.

= 1.12.8 =
* Report header: logo on one side, site name on the other. A4-width report.

= 1.12.7 =
* Wider email report with a Site check heading. Product logo on the details page.

= 1.12.6 =
* Updated, sharper logo on client reports and in email.

= 1.12.5 =
* Larger, clearer logo in the admin header, client report, and email. Readable fonts on reports.

= 1.12.4 =
* The first-scan opening point stays saved, even after a visit.

= 1.12.3 =
* Opening point for reports is saved automatically. Product mark in the admin menu.

= 1.12.2 =
* Clearer layout on client reports and in the email.

= 1.12.1 =
* Client reports use the icomm site health logo.

= 1.12.0 =
* Branded client reports: visit before-and-after, open status, and a monthly email summary.

= 1.11.33 =
* A tabindex finding on a skip-to-content link is shown as information, not as an open task.

= 1.11.32 =
* Privacy and terms links are found in the bar under the footer, not only inside the footer template.

= 1.11.31 =
* Privacy policy links in the site footer are detected correctly.

= 1.11.30 =
* Scan times follow the WordPress site timezone.

= 1.11.29 =
* Stability fixes for the privacy scan and improvement plan.

= 1.11.28 =
* Privacy policy link check also finds links in the site footer.

= 1.11.27 =
* One click can complete every unnamed link on the site.

= 1.11.26 =
* Complete all fills the same unnamed link on every page in one click.

= 1.11.25 =
* Complete all also fills accessible names in the site header and menus.

= 1.11.24 =
* Plugin improvements.

= 1.11.23 =
* Interface improvements.

= 1.11.22 =
* An http:// link finding in Elementor names the list item to click, not a heading or empty image.

= 1.11.21 =
* Security headers show on the public site after enabling. If a row remains, Recheck verifies the live site.

= 1.11.20 =
* Blocking the WordPress version file updates on the same screen. If cache still shows it, there is one Recheck action.

= 1.11.19 =
* Improvement plan action buttons open in a new tab. Clearer homepage H1 guidance: several lines in one H1 still count as one heading.

= 1.11.18 =
* After enabling security headers, the plan no longer keeps the same blue Enable buttons. If cache still hides them, one Recheck action purges and verifies the public site.

= 1.11.17 =
* The dashboard check process is clearer: one step at a time, and the speed rings are the same test as card 2.

= 1.11.16 =
* Opening the improvement plan from the admin menu stays in WordPress admin.

= 1.11.15 =
* The improvement plan also shows Google suggestions when the score is already OK, without lowering the site score.

= 1.11.14 =
* The plugin can be activated even when the license server is unreachable.

= 1.11.13 =
* If Google's speed check fails, you can run it again from the dashboard.

= 1.11.12 =
* After you confirm a PHP file is safe, you can mark it as known so the security check is no longer critical.

= 1.11.11 =
* Updating several icomm plugins at once is more reliable.

= 1.11.10 =
* The details page shows only the last three updates, at the bottom of the description.

= 1.11.9 =
* Emails follow the site language.

= 1.11.8 =
* Speed-check status and http:// link-fix instructions appear in full Hebrew, matching the English screens.

= 1.11.7 =
* PageSpeed run status shows inside the speed-check card, not only at the top of the screen.

= 1.11.6 =
* Privacy scan finds broken http:// links in Elementor header/footer templates and opens the exact editor.

= 1.11.5 =
* Cookie-consent actions open a screen you can actually use, and the privacy scan points to Elementor Custom Code when a tracking tag is stored there.

= 1.11.4 =
* Privacy scan names the plugin screen, snippet, or theme file where a leftover tracking tag is stored.

= 1.11.3 =
* Clearer tracking settings: full-width layout and original brand icons.

= 1.11.2 =
* Details page: tracking tags, form Lead, Facebook, Instagram, Google, and TikTok.

= 1.11.1 =
* Clearer tracking settings: one box for all tags, small icons, and an explanation when tags are managed outside the plugin.

= 1.11.0 =
* Send a Lead after a successful form to Meta (Facebook and Instagram) and TikTok, plus an optional Google Ads conversion.

= 1.10.0 =
* Inject Meta Pixel, Google Ads, and TikTok from settings, with the same consent wait as Analytics.

= 1.9.20 =
* Autoload check uses size, not only option count, and database cleanup can stop transients from loading on every request.

= 1.9.19 =
* Cookie-consent tasks open the plugin that still injects a tag before approval, not a single vendor by default.

= 1.9.18 =
* Cookie-consent scan finds a Google Ads tag that still loads before approval, and points to the plugin that injects it.

= 1.9.17 =
* Cookie-consent tasks open Complianz Integrations to block pixels, not the dashboard task list.

= 1.9.16 =
* Analytics extra-tag check no longer treats image sizes as Google IDs, and links to the exact page or template.

= 1.9.15 =
* Warns if another Google Analytics or Tag Manager ID is present on the site, even after you already saved an ID in settings.

= 1.9.14 =
* Improvement-plan actions open the right screen: cookie consent in Complianz, tabindex in Elementor Theme Builder.

= 1.9.13 =
* Suspicious PHP files: check them in icomm Malware Guard before deleting, including quarantine with restore.

= 1.9.12 =
* Action buttons in the plan and security checks open the real destination (LiteSpeed / Cloudflare / DNS), instead of reloading the same screen.

= 1.9.11 =
* Improvement plan lists check-report findings (headers, readme, server banner, privacy) with a one-click fix or a clear path.

= 1.9.10 =
* Clearer broken-links screen: shows where the link sits, and one-click clear when the product is gone.

= 1.9.9 =
* PageSpeed no longer gets stuck on Refreshing after a run.

= 1.9.8 =
* English details page prices in USD. Free download, then purchase from the plugin.

= 1.9.7 =
* Installation stability improvements.

= 1.9.6 =
* PRO price in English in USD or EUR.

= 1.9.5 =
* WordPress admin UI improvements.

= 1.9.4 =
* Display improvements on the details card.

= 1.9.3 =
* English product details page in the store.

= 1.9.2 =
* PRO checkout in Hebrew or English, matching the site language.

= 1.9.1 =
* Stability improvements on install.

= 1.9.0 =
* Full Hebrew and English interface, following the WordPress language.

= 1.8.28 =
* Privacy scan fix.

= 1.8.27 =
* Customer ratings on the plugin details page.

= 1.8.26 =
* Privacy scan UI improvements.

= 1.8.25 =
* Mixed content: אחרי «תקן הכל» מאמתים מול האתר החי (עם מעקף מטמון), שומרים דוח מעודכן ומרעננים את המסך. בלי סריקת AJAX שנתקעת על 1% מול רשימה ישנה.
* Mixed: נספרים רק משאבי אותו דומיין (לא קישורי http:// שבורים בלי דומיין).

= 1.8.24 =
* Mixed content: תיקון אמיתי ברמת דומיין (REPLACE ב-_elementor_data/תוכן + מחיקת CSS של Elementor ליצירה מחדש). ספירת ממצאים לפי כתובת ייחודית (לא כפילות בכל עמוד).
* UX: חיווי התקדמות בתיקון Mixed מציג טקסט נכון (לא «aria-label»).
* SEO: הסבר H1 מבהיר שמדובר בכמה תגיות H1, לא בכמה שורות בתוך H1 אחד.

= 1.8.23 =
* פרטיות / Mixed content: אחרי תיקון הרשימה מתרעננת אוטומטית בסריקה (בלי באנר ירוק מול 68 ישנים). ממשק דפים לטיפול פשוט יותר וקריא יותר.

= 1.8.22 =
* Mixed content: תיקון sitewide (postmeta, options, guid, קבצי CSS של Elementor) + ניקוי מטמון Elementor/LiteSpeed/WP-Optimize אחרי החלפה. מתאים ל-Theme Builder וללוגו האתר.

= 1.8.21 =
* פרטיות: «הרץ סריקת פרטיות» רץ ב-AJAX / עמוד פרטיות (בלי admin-post) כדי לא להיתקע ב-403 של WAF כמו BunkerWeb.
* Mixed content: תיקון חיפוש והחלפה גם כש־Elementor שומר כתובות עם \/ ב־JSON (כולל Header/Footer של Theme Builder).

= 1.8.20 =
* דשבורד: סדר תהליך מתוקן. קודם סריקות (קישורים → מהירות → פרטיות), אחר כך תוכנית שיפור וציון, ובסוף תיקון.

= 1.8.19 =
* דשבורד: כרטיס 5 «סריקת פרטיות» עם כפתורי הרצה / עמוד פרטיות. בהודעות Mixed content: כפתור «הרץ סריקת פרטיות» ברור.

= 1.8.18 =
* ביצועים: אזהרת «מטמון ממתין להפעלה» הוסרה לגמרי מתוכנית השיפור (שייכת רק להגדרות). אם המטמון מסומן בהגדרות, התוכנית לא מציגה את השורה הזו.

= 1.8.17 =
* פרטיות: אחרי «החלף ל-HTTPS» / «תקן את כל Mixed content» מוצג באנר חיווי מתחת לכפתור + פאנל התקדמות (מה קורה בפועל).

= 1.8.16 =
* ביצועים: מטמון נחשב פעיל לפי drop-in + WP_CACHE (עם תיקון אוטומטי של config.php). שורת «ממתין להפעלה» לא נשארת בתוכנית כשההגדרות כבר ירוקות.

= 1.8.15 =
* ביצועים: שורת «מטמון ממתין להפעלה» נעלמת מתוכנית השיפור ברגע שההגדרות מציגות מטמון פעיל (גם ממטמון ישן של התוכנית).

= 1.8.14 =
* Analytics: כברירת מחדל התגים תמיד מחכים ל־Complianz (גם אם זיהוי התוסף נכשל). אופציה «טען מיד» בהגדרות. ניקוי מטמון בעת שמירת Analytics.

= 1.8.13 =
* Privacy/CMP: כש־Analytics מוזרק מ־site health וממתין ל־Complianz, לא מסומן יותר «קוסמטי» בגלל HTML ישן מ־LiteSpeed/CDN. ניקוי מטמון LiteSpeed בעת סריקה/עדכון.

= 1.8.12 =
* Privacy: סריקת CMP עוקפת מטמון עמודים (`?icomm_sh_nocache`) כדי לא לדווח «קוסמטי» על HTML ישן אחרי תיקון חסימת Analytics.

= 1.8.11 =
* Analytics/CMP: זיהוי Complianz חזק יותר לחסימה עד הסכמה; ניקוי מטמון עמודים וסריקות אחרי עדכון גרסה; פחות false positive על dataLayer/gtag של באנר.

= 1.8.10 =
* Analytics: כש־Complianz מותקן, הזרקת GA4/GTM מ־site health מחכה להסכמה (לא נטענת לפני אישור). מתקן אזהרת «CMP קוסמטי» כשהמעקב מוגדר רק בתוסף.

= 1.8.9 =
* Analytics: אזהרת «הזרקה כפולה» רק כש־Complianz באמת מוגדר להטמיע GA/GTM (לא כשהוא רק באנר הסכמה ו־«not with any of the above»).

= 1.8.8 =
* Privacy: תיקון Mixed content בלחיצה («החלף ל-HTTPS» + «תקן את כל Mixed content») למשאבים מאותו דומיין; חיפוש גם ב-Theme Builder. פיקסלים/CMP בלי כפתור Elementor מבלבל.

= 1.8.7 =
* ביצועים: אחרי הפעלת מטמון מוצלחת, משימת «ממתין להפעלה» נעלמת מתוכנית השיפור (גם ממטמון ישן).

= 1.8.6 =
* Privacy: דגלי CMP בלי «עריכה ב-Elementor»; הוראות ברורות ל-Complianz; מטמון/options של icomm לא מסומנים יותר כמקור הטמעת Analytics.

= 1.8.5 =
* אבטחה: wordfence-waf.php (וקבצי WAF דומים) ברשימת ההיתר. לא מסומנים יותר כ־PHP חשוד בשורש האתר.

= 1.8.4 =
* Privacy: בדגלי Mixed content מוצגים «מה לעשות», כפתור «עריכה ב-Elementor» (לא עורך בלוקים), ו«החלף ל-HTTPS» אוטומטי למשאבים מאותו דומיין.

= 1.8.3 =
* UI: לחיצה על «תוכנית שיפור» (כפתור / כרטיס / קישור) מציגה מיד חיווי «טוען תוכנית שיפור…» כדי שלא ייראה תקוע.

= 1.8.2 =
* Settings: Max links per scan מציג וחותך לטווח 100–1500 (ערכים ישנים כמו 5000 כבר לא מוצגים מעל המגבלה). תיאור השדה מיושר למקסימום האמיתי.

= 1.8.1 =
* Analytics: זיהוי מעקב קיים בדף הבית (כולל סקריפט חסום ב־CMP) וב־Complianz; סימון «כבר מנוהל מחוץ לתוסף»; כפתור Complianz הופך ל«הגדרות» כשמותקן (במקום «התקנה»).

= 1.8.0 =
* הגדרות: מחיקת GA4 / GTM / מפתח PageSpeed עם סימון «מחק» וכפתור «אישור» ליד השדה (בלי לרדת לשמירה בתחתית).
* פרטי התוסף: הסבר ברור ללקוח על Analytics מההגדרות, Complianz בלי כפילות, ומטמון עמודים עם הסרה מלאה.

= 1.7.99 =
* תוכנית שיפור: כשמזהה GA4/GTM שמור ב־site health וגם Complianz/CMP פעיל, מופיעה «לידיעה» על סיכון להזרקה כפולה (עם קישור להגדרות).

= 1.7.98 =
* Analytics + CMP: אזהרה כש־Complianz (או דומה) פעיל יחד עם מזהה GA4/GTM בהגדרות, כדי למנוע הזרקה כפולה.
* מטמון עמודים: כפתור «הסרת מטמון icomm לחלוטין» (מנקה HTML, מוחק drop-in ותיקייה, מסיר רק שורת WP_CACHE של icomm). גם בהשבתת התוסף.

= 1.7.97 =
* מטמון עמודים: «הפעלה אוטומטית» מגבה ומחליף advanced-cache.php ישן של תוסף אחר (במקום לעצור בשקט).
* PageSpeed: כפתור «קבלת מפתח מ-Google» רק כשאין מפתח; אם המפתח לא תקין, קודם מוחקים ואז מופיע הכפתור.
* Analytics: חיווי ירוק כשמזהה GA4/GTM תקין ופעיל.

= 1.7.96 =
* Analytics: שדות GA4 / GTM בהגדרות עם הזרקה אוטומטית ל־wp_head (בלי תוסף נוסף ובלי עריכת תבנית). תוכנית השיפור מפנה להגדרות + קישור להמלצת CMP/Complianz.

= 1.7.95 =
* Sitemap + Wordfence: כשה־sitemap ושורה ב־robots כבר תקינים, נשארת רק «לידיעה» (allowlist ב־WAF) במקום אזהרה עם כפתור «הוסף Sitemap» שחוזר כלולאה.

= 1.7.94 =
* Telemetry: on new install, 1-2 short attempts to report to the license server; if blocked, enter cooldown without hanging the site.

= 1.7.94 =
* Telemetry: דיווח התקנה רץ מיד בלחיצת «הפעלה» באדמין (לא צריך להתנתק). ניסיון שני אם נכשל; אחר כך cooldown.

= 1.7.93 =
* Telemetry: על התקנה חדשה מבוצעים 1-2 ניסיונות קצרים לדיווח לשרת הרישיונות; אם חסום עוברים ל-cooldown בלי לתקוע את האתר.

= 1.7.92 =
* יישור מול Lead Scanner: בדיקת sitemap דורשת XML אמיתי + שורת Sitemap ב־robots; כש־WAF (Wordfence וכו׳) פעיל מופיעה משימה בתוכנית גם אם ה־loopback תקין. ensure_sitemap_in_plan כמו security.txt.

= 1.7.91 =
* ניקוי מסד נתונים: חיווי התקדמות ברור יותר (אחוזים, שעון זמן, שלב X מתוך Y, נמחקו עד כה, פס מונפש) כדי שלא ייראה תקוע בזמן מחיקת גרסאות רבות. הניקוי לא דורש רישיון PRO.

= 1.7.90 =
* תוכנית שיפור / SEO: ממצאי «תמונות בלי alt» מבדיקת האתר מופיעים בתוכנית עם תיקון. סריקת HTML חי של דף הבית (כמו Lead Scanner) + סריקת Elementor `_elementor_data`, לא רק post_content.

= 1.7.89 =
* security.txt: באתרים שבהם כל /.well-known/ מחזיר 403 (LiteSpeed/WAF) היצירה כותבת גם /security.txt בשורש, מגישה אותו ב־rewrite, והבדיקה/Lead Scanner מקבלים את הנתיב הזה.

= 1.7.88 =
* security.txt: יצירה בלחיצה כותבת גם ל־DOCUMENT_ROOT (אם שונה), מגדירה הרשאות, מוסיפה rewrite ב־.htaccess דרך WordPress, מנקה מטמון LiteSpeed, ובודקת נגישות ציבורית אחרי יצירה (הודעת partial אם עדיין חסום).

= 1.7.87 =
* security.txt: הבאנר מופיע גם כשהקובץ קיים בשרת אבל לא נגיש בכתובת הציבורית (כמו שסריקה חיצונית רואה). מיושר מול Lead Scanner.

= 1.7.86 =
* security.txt: באנר יצירה מיד מתחת לכותרת תוכנית השיפור (בדיקה חיה בלי מטמון ישן). אם אין קובץ פיזי תראו את הכפתור. דיווח אם יצירת הקובץ נכשלה בהרשאות.

= 1.7.85 =
* ARIA אסור (Elementor Reviews): זה באג Elementor (`aria-label="קרא עוד"` על div אייקון), לא מתיקון «השלם שמות». נוסף תיקון בטוח בלחיצה שמסיר את ה־aria-label האסור מה־div בלבד.

= 1.7.84 =
* security.txt: תקין רק אם יש קובץ פיזי (לא הגשה וירטואלית). באנר יצירה תמיד בראש התוכנית כשחסר. זה מה שהסתיר את השורה מול סריקה חיצונית.
* השלמת שמות: אחרי תיקון בתוכן העמוד השורה יורדת ל«לידיעה» עם הסבר להריץ PageSpeed מחדש (במקום לחזור כמשימה פתוחה ממטמון Google).

= 1.7.83 =
* תיקון: כפתור «השלמת שמות» מ־PageSpeed כבר לא מקשר לאותו עמוד תוכנית. מפעיל «השלם שמות בעמוד הבית» (AJAX) על עמוד הבית.
* ARIA אסור: הסבר ברור למה אין תיקון בלחיצה (סיכון לשבירת Elementor) + סימון «שליטה חלקית».
* security.txt: באנר בולט בראש תוכנית השיפור עם כפתור יצירה. הוסר סנכרון חי כבד שסרבל את הטעינה.

= 1.7.82 =
* תוכנית שיפור: אם חסר `security.txt` בקובץ, השורה עם «יצירת security.txt» מופיעה תמיד (בלי תלות ב־HTTP).
* ריבוע 4: באפר התקדמות בלחיצה על «תוכנית שיפור» עד לפתיחת ההמלצות. טעינת התוכנית מהירה יותר (סנכרון מלא רק ברענון).

= 1.7.81 =
* אבטחה / תוכנית שיפור: `security.txt` מסומן תקין רק אם הקובץ או ה-URL באמת מחזירים תוכן תקין. אופציה דלוקה בלי קובץ נגיש כבר לא מסתירה את השורה. חסר → שורה בעדיפות בינוני עם כפתור «יצירת security.txt».

= 1.7.80 =
* תוכנית שיפור: סנכרון חי עם בדיקות המודולים. כל ממצא שאינו «תקין» בבדיקת האתר (אבטחה / WordPress / ביצועים וכו׳) חייב להופיע בתוכנית; ממצא שתוקן יורד מהתוכנית. בלי פער בין המסכים.

= 1.7.79 =
* תוכנית שיפור: שורת security.txt מופיעה כמשימה לתיקון עם כפתור «יצירת security.txt» (לא רק לידיעה במודול אבטחה).

= 1.7.78 =
* תוכנית שיפור: רענון מנקה גם מטמון שלמות ליבה (C) וסריקת קבצים חשודים, כדי שאחרי החזרת readme/license השורה הקריטית תרד מיד.

= 1.7.77 =
* אבטחה: מדיניות אחידה עם Malware Guard. לא ממליצים למחוק readme.html / license.txt (חלק מליבת WordPress הרשמית). מחיקת שאריות בטוחה נשארת ל-phpinfo/.env בלבד.
* אם הקבצים חסרים: ההמלצה היא להחזיר מליבה רשמית / עדכון WordPress, לא לרוקן תוכן.

= 1.7.76 =
* תוכנית שיפור: אחרי החלת skip-link / font-display השורה הופכת ל«לידיעה» עם הסבר ברור (למה נשארת, מתי תרד, מה עושה rollback) במקום תגית «בינוני» וכפתור כחול מבלבל.
* מרכז סריקה ריבוע 3: באפר/חיווי התקדמות לבדיקת מהירות PageSpeed.

= 1.7.75 =
* אבטחה: שלמות ליבת WordPress (C) מול checksums רשמיים של wordpress.org (שינויים / חסרים / קבצים לא צפויים).

= 1.7.74 =
* אבטחה: סריקת PHP במיקומים מסוכנים (A) + דפוסי webshell/הסוואה (B), דיווח בלי מחיקה אוטומטית.

= 1.7.73 =
* תוכנית שיפור: תיקונים אופציונליים עם בדיקת סיכון, אישור מנהל ו-rollback: font-display swap, skip link, tabindex>0, טיוטת meta description.

= 1.7.72 =
* רישיון: הוסרה הערת כוכביות; מלבן חיבור קומפקטי; בלוק רישיון בראש/תפריט נפרד; כפתור הפעלה לא primary כשפעיל.

= 1.7.71 =
* חיווי חיבור: סטטוס שמור לא מציג חסימה כוזבת; כפתור «בדוק חיבור עכשיו» (AJAX, timeout 3s).

= 1.7.70 =
* תיקון: חיווי חיבור לשרת הרישיונות תמיד נטען (גם אם תוסף ישן טען telemetry קודם); תצוגת מפתח LTR.

= 1.7.69 =
* UX: מפתח רישוי מוצג במסך עם כוכביות ו־6 תווים אחרונים בלבד; שמירה מזהה מפתח ממוסך.
* תיקון: «מחק קבצים בטוחים» נשאר באותו לשונית עם באפר התקדמות ורענון קצר (במקום חלון ריק).
* UX: הודעת חיבור לשרת הרישיונות מוצגת מתחת לסטטוס הרישיון.

= 1.7.68 =
* UX: הודעת חיבור לשרת הרישיונות במסך הרישוי (מטמון בלבד, ללא HTTP בטעינת העמוד).
* תיקון: קידוד עברית בניקוי מסד נתונים — ספירת טבלאות ו«סה״כ נמחקו».

= 1.7.67 =
* WAF-safe: קריאות רקע לשרת הרישיונות/עדכונים לא מאריכות timeout (רק הורדת ZIP); ping ב-admin_init נדחה ל-Cron/טלמטריה.

= 1.7.66 =
* UX: באפר התקדמות ב«השלם הכל» לשמות נגישים, ואחרי הצלחה ריענון קל של הרשימה (בלי alert חוסם).

= 1.7.65 =
* תיקון: «השלם הכל» לשמות נגישים דיווח הצלחה אבל אחרי ריענון חזר (Elementor מחק aria מ-HTML). עכשיו נשמר גם ב-Elementor וגם בתוכן, בלי לסמן שוב קישורים שכבר תוקנו.

= 1.7.64 =
* אבטחה: זיהוי רשומת `_dmarc` שגויה (SPF במקום v=DMARC1) עם הסבר ברור.
* תיקון: «הפעלת כותרות אבטחה» / «הסתרת גרסה» לא נתקעים דקות אחרי לחיצה (דילוג על בדיקת homepage כשהאפשרות כבר פעילה + timeout קצר).

= 1.7.63 =
* תיקון: «השלם הכל» לשמות נגישים (aria-label) נכשל כי הוחלף רק הקישור הראשון בעמוד; עכשיו מאתרים לפי href. תמיכה מורחבת ב-Elementor (icon list, HTML/עורך).

= 1.7.62 =
* תוכנית שיפור: כפתור ארוך בשורה מלאה; כפתורים קצרים אחד ליד השני.

= 1.7.61 =
* תוכנית שיפור: כפתורי פעולה קומפקטיים יותר (פחות שוליים סביב הכיתוב).

= 1.7.60 =
* תוכנית שיפור: כפתורי פעולה גדולים וקריאים יותר (גופן/ריווח).

= 1.7.59 =
* תוכנית שיפור: כפתורי פעולה בשורה אחת (בלי שבירה לאותיות); שבירת שורות רק בטקסט משימה/המלצה.

= 1.7.58 =
* תוכנית שיפור: הגבלת רוחב טבלה + שבירת שורות לכתובות/טקסט ארוך.

= 1.7.57 =
* WAF: הודעה ברורה כשאין יציאה לשרת הרישיונות; fail-fast לרקע.

= 1.7.56 =
* WAF-safe: timeout קצר + cooldown ליציאה חסומה לשרת הרישיונות (בלי תקיעת אתר).

= 1.7.55 =
* תיקון כפילות «הצגת פרטים» ברשימת התוספים (הוסר הקישור הריק של וורדפרס).

= 1.7.54 =
* אחרי עדכון גרסה: דיווח מיידי לשרת הרישיונות (טלמטריה משותפת).

= 1.7.53 =
* תיקון קריסת PHP 8: טלמטריה בלי קבוע ICOMM_LIC_TELEMETRY_RETRY_KEY.

= 1.7.52 =
* תיקון: לא מציעים עדכון כשהגרסה המרוחקת זהה/ישנה מהמותקנת (ניקוי response ישן).

= 1.7.51 =
* רישוי: טלמטריה אמיתית לפיקוח התקנות; אין חסימת activate/check/updates; בלי HTTP חוסם בטעינת עמוד.

= 1.7.50 =
* תיקון טלמטריה: הוחזר bootstrap (תיקון קריסה/רישום) + cron/cooldown ל-WAF.

= 1.7.49 =
* WAF/egress: telemetry via WP-Cron only (no HTTP on page load); license egress cooldown; geo cooldown where applicable.

= 1.7.48 =
* תיקון: מניעת תקיעת שרת - קיצור timeout לבדיקות רישיון אוטומטיות / קריאות HTTP בנתיב טעינה.

= 1.7.47 =
* תיקון: טלמטריית רישוי non-blocking + timeout של שניה (מונע תקיעת שרת כש-license.icomm.systems איטי).

= 1.7.46 =
* נגישות: סריקת קישורים בלי שם נגיש (Lighthouse link-name) בתוכן ו-Elementor, הצעת aria-label, והשלמה בלחיצה («השלם הכל» בעמוד / «השלם» בפריט).
* תוכנית שיפור + מודול SEO: באנר והמלצות; מדריך PageSpeed link-name מפנה להשלמה האוטומטית.

= 1.7.45 =
* תיקון: אזהרות Undefined $icomm_lic_telemetry_registry / foreach(null) בטלמטריית רישוי (אתחול בטוח של הרשימה).

= 1.7.44 =
* שכבה C: עומק מדיניות פרטיות (סעיפי תיקון 13) במודול פרטיות ובתוכנית השיפור.
* נגישות/SEO: זיהוי lang, skip link, קישורים מעורפלים, סדר כותרות. תיקון בלחיצה ל־lang ב־HTML.
* מיושר מול ממצאי Lead Scanner 1.12.0.

= 1.7.43 =
* אבטחה: זיהוי SPF/DMARC/DKIM (כולל CNAME של Microsoft 365), CAA, security.txt; Permissions-Policy ו־COOP בכותרות.
* תיקון בלחיצה: כותרות מורחבות + יצירת security.txt. DNS (SPF/DMARC/DKIM/CAA) בתוכנית השיפור כהמלצה לרשם.
* בלי מקף ארוך (em dash) בהודעות החדשות.

= 1.7.42 =
* XML-RPC: כיבוי אמיתי עם חסימת HTTP 403 על xmlrpc.php (לא רק פילטר WordPress שמשאיר תשובת fault).
* תיקון זיהוי שווא: תשובת «disabled» / 403 לא נחשבת יותר «פתוח מבחוץ».

= 1.7.41 =
* תוכנית שיפור: נוספה שלב פרטיות (ממצאים כמו Lead Scanner - מדיניות, שירותים חיצוניים, CMP וכו׳) עם קישור לתיקון.
* אבטחה: זיהוי xmlrpc.php גם ב־HTTP (לא רק פילטר WP) + כפתור כיבוי; מניעת מחיקת קישורי פעולה מממצאים קיימים.
* אחרי עדכון: לחצו «רענן עכשיו» בלוח הבקרה כדי לטעון משימות אבטחה/פרטיות.

= 1.7.40 =
* Security (PRO): זיהוי חשיפת גרסת WordPress ב־meta generator + הסתרה בלחיצה (יישור מול Lead Scanner).
* מופיע באבטחה ובתוכנית השיפור עם כפתור «הסתרת גרסת WordPress».

= 1.7.39 =
* Security (PRO): כותרות אבטחה (HSTS/XFO/nosniff/Referrer-Policy) - זיהוי + הפעלה בלחיצה; זיהוי ומחיקה בטוחה של phpinfo.php / info.php / .env; הרחבת גיבויי wp-config.
* יישור מול ממצאי סריקה חיצונית (Lead Scanner) כדי שמה שנמצא בדוח ללקוח יהיה ניתן לטיפול בתוסף.

= 1.7.38 =
* Feature: One-click security fix “Block file editing” adds DISALLOW_FILE_EDIT to wp-config.php when writable. Clearer guidance on which plan tasks can/cannot be auto-fixed.

= 1.7.37 =
* UX: robots.txt PageSpeed task shows one-click “Create physical robots.txt” when possible; clearer path when a file exists but bots are still blocked (Wordfence allowlist). Stronger create-write fallback.

= 1.7.36 =
* UX polish: Hebrew menus/cards/scan messages; stop double-counting REST in site score; refresh improvement-plan cache after REST fix; clearer “flagged vs broken” wording; skip logo/favicon as links; clear stale FP notice.

= 1.7.35 =
* Fix: REST API “Error” false positive when /wp-json/ works in the browser but the server cannot HTTP-loopback to itself. Check uses in-process rest_do_request first.

= 1.7.34 =
* UX: Site Score breakdown on the dashboard (exact point deductions). Makes clear that 72 is not an average of Lighthouse 83–100; open improvement-plan tasks drive the score down.

= 1.7.33 =
* Fix: Stop false “hundreds of broken links” on small Elementor sites. Collector no longer treats image/media URL fields or bare internal tokens as hyperlinks. Counts unique URLs. Clears old false-positive rows once; re-run a full link scan after update.

= 1.7.32 =
* UX: Explain hidden/Elementor broken links (often on images, not blue text). Show where each URL is stored (Elementor / content / meta). “Clear link” removes it from Elementor JSON + content. Replace also updates Elementor data.

= 1.7.31 =
* UX: Broken links screen in clear Hebrew. Decoded source URLs (readable Hebrew paths), post titles when available, plain-language issue text, and a short “what this means / what to do” guide at the top.

= 1.7.30 =
* UX: Clear numbered workflow on the dashboard (1 links → 2 plan/score → 3 PageSpeed → 4 fix). Shows done/next status and a “next step” banner so users know what to run and in what order.

= 1.7.29 =
* Fix: All admin dates use dd/mm/yyyy (with time as H:i when relevant). Clarified that Site Score is not an average of Lighthouse rings: it subtracts points for broken links, errors/warnings, and improvement-plan tasks. Hebrew last-scan summary on the dashboard.

= 1.7.28 =
* Feature: After starting a link scan you can leave and keep working on the site. The scan continues in the background via WP-Cron (advances as pages are browsed). Banner shows progress when you return.

= 1.7.27 =
* Fix: Stop scan chaos. Opening the plugin no longer auto-drives endless scans. User “Run” starts a fresh scan (replaces stuck ones). Background cron continues quietly; banner watches progress with Continue/Cancel. Clear notice that dashboard numbers are from the previous completed scan. Defaults lowered (Free 400 / PRO 500) so scans finish. Stale scans auto-clear after 30 minutes. One-time reset of zombie scans on upgrade.

= 1.7.26 =
* UX: Removed internal/dev wording from refresh copy. Fixed duplicated time estimate in the scan banner. Scan progress text and score labels in Hebrew for a cleaner admin UI.

= 1.7.25 =
* UX: Link scans never use a full-screen overlay. Progress shows in a small sticky banner (counts, %, ETA, Cancel) while you keep using the plugin.

= 1.7.24 =
* Fix: Opening the plugin no longer hijacks the admin with a multi-hour link scan. Background/cron scans stay in the background; entry shows a small banner (Continue / Cancel) instead of a full-screen overlay. Stale scans older than ~90 minutes are cleared automatically.

= 1.7.23 =
* UX: When the improvement plan is stale (e.g. after PageSpeed), the dashboard shows “needs refresh” instead of a misleading 0. Refresh now runs in steps with percent + ETA, not a stuck spinner.

= 1.7.22 =
* UX: Plugin admin opens instantly. No full-screen “loading” overlay on every visit or menu click. Dashboard paints immediately from cache/DB and refreshes quietly in the background.

= 1.7.21 =
* UX: ETA never shows hours — caps at “over 45 minutes” with advice to lower Max links. PRO default 800 links (hard max 2000).

= 1.7.20 =
* Fix: Absurd multi-thousand-hour ETA after a few slow links. ETA waits for a stable sample and caps at “over 3 hours”. Faster scans by caching unique URL results; default Max links lowered to 1500.

= 1.7.19 =
* Fix: Dashboard AJAX more resilient to host HTTP 503 after heavy link scans (lighter build, skip live Google probes, auto-retry, clear stuck scans stuck at 0).

= 1.7.18 =
* UX: Broken Links scan overlay now shows live counts (checked/total), percent, broken/warnings, and an animated buffer bar while the server is working.

= 1.7.17 =
* Fix: Broken Links scan no longer freezes at “0 of N” on large sites. Smaller HTTP batches, shorter timeouts, progress updates during the first wave, Cancel button on the scan overlay, and link lists stored outside the heavy batch option.

= 1.7.16 =
* Security (PRO): בדיקות חדשות — PHP חשוד ב־uploads, סקירת משתמשי מנהל, DISALLOW_FILE_EDIT, וקבצים רגישים בשורש (readme/license + גיבויי wp-config). מחיקה בלחיצה ל־readme.html/license.txt בלבד.

= 1.7.15 =
* Fix: Broken Links Scanner now extracts Elementor link fields from `_elementor_data` JSON (`"url"`), not only HTML `href`/`src`. Also resolves common relative paths without a leading slash. Version shown inside admin H1 titles.

= 1.7.14 =
* רישוי: מימוש גשר POST שקוף ומוגן nonce להפעלת רישיון לאחר רכישה, ללא redeem בבקשת GET.

= 1.7.13 =
* Admin: מספר גרסה מוצג בכותרת כל עמודי הניהול (ליד H1).

= 1.7.12 =
* Feature: כשלי SEO מ-PageSpeed/Lighthouse (במיוחד robots.txt unable to download) מופיעים בתוכנית השיפור וב-SEO & Google עם כפתור «צור robots.txt פיזי», גם כשהבדיקה הפנימית מהשרת עברה.

= 1.7.9 =
* Fix: כש-Image Optimizer פעיל — מסתירים לגמרי את «Improve image delivery» (גם ממטמון ישן); לא שולחים יותר לממיר ריק.

= 1.7.8 =
* Fix: כש-Image Optimizer מציג 0 פריטים לייעול — לא מציגים יותר «Improve image delivery → Image Optimizer» (רעש ריק); LCP מופנה ל-Elementor במקום לממיר ריק.

= 1.7.7 =
* Fix: זיהוי תמונות מול ספריית המדיה גם כשהעמוד מגיש WebP/AVIF והמדיה שומרת JPG/PNG (Image Optimizer); פחות התראות שווא «לא מקושרת למדיה» כשהקובץ כן במדיה.

= 1.7.6 =
* Fix: באנר «14 תמונות ללא alt» — כשהתמונות לא מקושרות לספריית המדיה (Elementor) לא מפנים ל-AI Alt (שמציג 0); הודעה ברורה לעריכת העמוד. סיווג לידיעה/שליטה חלקית מחושב מחדש גם ממטמון ישן כדי שהציון והתוכנית יתעדכנו.

= 1.7.5 =
* UX: ממצאי PageSpeed מחולקים ל«לתיקון» / «שליטה חלקית» / «לידיעה»; ממצאים שלא בשליטה (מטמון צד־שלישי, dependency tree וכו') ו־TTFB עם LiteSpeed לא מורידים מציון האתר; כרטיס תוכנית השיפור סופר רק משימות לתיקון.

= 1.7.4 =
* Fix: כש-LiteSpeed פעיל — כפתורי מטמון/TTFB בתוכנית השיפור מופנים ל-LiteSpeed (לא למטמון icomm), עם הוראות Browser Cache צעד-אחר-צעד; זיהוי LiteSpeed חזק יותר.

= 1.7.3 =
* Fix: עם LiteSpeed/מטמון אחר — אין יותר המלצת «הפעילו cache» על TTFB גבוה (loopback); כפתור להגדרות LiteSpeed; הוראות תיקון מפורטות יותר ל-FCP/LCP/Speed Index/מטמון דפדפן.

= 1.7.2 =
* Fix: זיהוי LiteSpeed/תוסף מטמון גם כשמטמון icomm במצב «ממתין»; באנר בתוכנית השיפור כשחסר פירוט PageSpeed (צריך הרצה מחדש); חילוץ ממצאי Lighthouse 13 (insights).

= 1.7.1 =
* תוכנית שיפור: ממצאי Lighthouse מפורטים (נגישות + ביצועים) עם הוראות תיקון בעברית וכפתור פעולה (Elementor / מטמון / Image Optimizer) — לא רק קישור לגוגל. דורש הרצת PageSpeed מחדש.

= 1.7.0 =
* תוכנית שיפור: משימות מ-PageSpeed כש-Performance או Accessibility מתחת ל-90 (מובייל/דסקטופ) + קישור לדוח Google המלא; משפיע גם על Site Score ב-PRO.

= 1.6.99 =
* Fix: אחרי OPTIMIZE אין רענון אוטומטי (תקיעת דפדפן) — כפתור «רענון העמוד עכשיו»; OPTIMIZE טבלה אחת לאצווה.

= 1.6.98 =
* Fix: OPTIMIZE TABLE לא רץ יותר על כל הטבלאות בבקשה אחת (נעילת MySQL); כעת באצוות קטנות, לא מסומן כברירת מחדל, והמתנה לפני רענון העמוד אחרי ניקוי כבד.

= 1.6.97 =
* Fix: אחרי ניקוי מסד נתונים העמוד מתרענן אוטומטית (כדי לעדכן את טבלת הבדיקות / Post revisions).

= 1.6.96 =
* עמוד פרטים: תיעוד מלא לניקוי מסד נתונים (מבוא, תכונות, תיקונים מהירים, FAQ על Elementor 403).

= 1.6.95 =
* WordPress Health: ניקוי מסד נתונים (גרסאות פוסטים, auto-drafts, אשפה, spam, transients שפגו, OPTIMIZE TABLE) — עוזר לתיקון HTTP 403 בשמירת Elementor בגלל נפיחות DB; בדיקת post revisions + קישור מתוכנית השיפור.

= 1.6.94 =
* Fix: באנר בולט בתוכנית השיפור למילוי alt ב-AI + כפתור Image Optimizer בכל שורת alt (גם עם מטמון ישן); מפתח מטמון חדש לרענון אוטומטי.

= 1.6.93 =
* SEO / תוכנית שיפור: תמיד מציגים הצעה ל-icomm Image Optimizer (AI Alt) — כפתור ל-AI / הפעלה / הורדה מ-icomm.market גם כשהתמונה לא מקושרת למדיה.

= 1.6.92 =
* Fix: דשבורד שנכשל בטעינה — סריקת alt מהירה יותר (אינדקס מדיה בזיכרון במקום מאות שאילתות), הודעת שגיאה מפורטת + כפתור «נסה שוב».

= 1.6.91 =
* Fix: תמונות ללא alt — זיהוי כשבקוד העמוד יש שם מקוצר (למשל 2468094617.jpg) ובמדיה הקובץ הוא shutterstock_…-scaled.jpg עם alt כבר ממולא.

= 1.6.90 =
* Fix: תמונות ללא alt — זיהוי טוב יותר מול ספריית המדיה (CDN / שם קובץ / גדלים); אם יש alt במדיה לא מופיע בתוכנית השיפור; כפתור AI רק כשיש attachment; רענון תוכנית בונה מחדש מיד.

= 1.6.89 =
* SEO: תמונות ללא alt — עריכה ידנית + הצעה ל-icomm Image Optimizer (מילוי alt ב-AI) כשהתוסף לא מותקן או לא מוגדר.

= 1.6.88 =
* Fix: PageSpeed «verified» status and last results now tied to the current API key fingerprint; changing or clearing the key invalidates stale cache.

= 1.6.87 =
* Settings: license and PageSpeed keys show masked preview (•••• + last 6 characters).

= 1.6.86 =
* Fix: clearing PageSpeed API key now works — use «מחק את המפתח השמור» checkbox; empty password field alone no longer keeps the old key. Key no longer shown in the input value.

= 1.6.85 =
* Page cache: stronger automatic activation (WP_Filesystem, chmod retry); «הפעלה אוטומטית» button; auto-retry on settings load; larger help dialog fonts; manual steps only as last resort.

= 1.6.84 =
* Settings: page cache activation checklist with per-item fix hints; ? help dialog explains wp-content, wp-config (WP_CACHE), and conflicting cache plugins.

= 1.6.83 =
* Performance: improvement plan distinguishes cache pending activation vs off; no more generic «enable cache» when already marked in settings.
* Page cache: operational check requires WP_CACHE; wp-config lookup supports parent directory; clearer pending state in TTFB.

= 1.6.82 =
* Fix: page cache checkbox stays checked after save even when drop-in / wp-config activation fails; retries enable on each save until operational.
* Settings: clearer message when cache is saved but not fully activated.

= 1.6.81 =
* Fix: settings save no longer wipes API key, GSC verification, or other options on partial save (e.g. page cache enable failure) or when PageSpeed key field is left blank.
* Settings: clarify that stored PageSpeed key can be saved without re-pasting.

= 1.6.80 =
* Fix: removed mid-form Save button that reset page cache / PageSpeed checkboxes when saving license; use bottom «שמירת שינויים» only.
* Settings: removed top yellow PageSpeed box; last results shown in PageSpeed section; cache status pill.
* Performance: TTFB no longer warns in improvement plan when icomm page cache is operational; PageSpeed task omits «enable cache» when cache is on.

= 1.6.79 =
* Settings: clearer Search Console verification (manual checkbox explained, status pill, Hebrew messages in SEO checks).

= 1.6.78 =
* Settings: PageSpeed API key status pill (verified / not tested / error) based on last PageSpeed run.

= 1.6.77 =
* Settings: simplified PageSpeed API setup guide for end users (3 clear steps only; removed Metrix and vendor-side notes).

= 1.6.76 =
* Copy: removed em dashes from PageSpeed setup guide, page cache settings, and TTFB cache advice (Hebrew UI).

= 1.6.75 =
* Settings: clearer Hebrew PageSpeed API setup guide (3 steps, one key for all your sites, not related to Metrix, free browser alternative link).

= 1.6.74 =
* Performance: TTFB check now shows icomm page cache status (HIT/MISS) and warmed timing after a second request when applicable; clearer advice when loopback measurement stays high despite cache.

= 1.6.73 =
* Performance: built-in simple HTML page cache (Settings toggle) — no .htaccess / gzip / browser caching; purge on content save + manual purge + admin bar link; auto-disables on plugin deactivation; blocks enable when WP Super Cache or similar is active.

= 1.6.72 =
* Fix: shared license telemetry file safe when multiple icomm plugins are active (no fatal redeclare).

= 1.6.71 =
* Privacy: decode percent-encoded URL paths when comparing links (fixes false “missing Terms link” when footer uses Hebrew slugs like `/תנאי-שימוש/` and WordPress permalinks are encoded).

= 1.6.70 =
* Privacy: match nav/footer links by post ID (`object_id`, `url_to_postid`) and `?page_id=` query URLs.

= 1.6.69 =
* Privacy: broader policy page detection (more search results, תקנון/terms/tos keywords, Hebrew slug fallbacks).

= 1.6.68 =
* Privacy: fix false “missing Privacy/Terms links” by extracting real hrefs from HTML and also checking WordPress nav menus (covers Elementor Canvas/home templates without a classic footer).

= 1.6.67 =
* Privacy: make “home page has links to Privacy/Terms” detection robust for relative URLs and www/http/trailing-slash variations (e.g. Elementor Canvas pages without a classic footer).

= 1.6.66 =
* Privacy: add progress UI for quick scan too (runs in background like deep scan) so users don’t think it’s stuck.

= 1.6.65 =
* Privacy: fix an edge-case refresh loop in background deep scan by ensuring “scan running” is true only when a real job exists; add client-side guard against stale “no active scan” completions.

= 1.6.64 =
* Privacy: deep scan background mode is now the default server-side (even if JS fails); avoid accidental refresh loops by redirecting to a stable results URL on completion.

= 1.6.63 =
* Privacy: deep scan now runs in background (batched AJAX with progress overlay) to avoid server time limits; improved explanation when a scan stops early.

= 1.6.62 =
* Privacy: reduce “scan truncated” cases by using a dynamic time budget based on the server’s max execution time (deep scans can fetch more pages before stopping).

= 1.6.61 =
* Privacy: treat analytics tags wrapped in CMP-blocked `<script type="text/plain">` as blocked (not “loaded before consent”), reducing false “CMP cosmetic” warnings for Complianz setups.

= 1.6.60 =
* Privacy: when suggesting exact injection sources, ignore trashed items and avoid generating “cannot edit (trash)” links.

= 1.6.59 =
* Privacy: hide scan cache transient options from “exact source” hints; link Complianz option hits directly to Complianz settings.

= 1.6.58 =
* Privacy: reduce false positives by excluding “G-RECAPTCHA” from GA ID detection and by skipping revision posts when suggesting exact injection sources.

= 1.6.57 =
* Privacy: add precise “what to fix” items for CMP cosmetic cases by searching DB/theme for detected GTM/GA IDs and surfacing direct edit links under “Issues to fix”.

= 1.6.56 =
* Privacy: show detected GTM/GA IDs (GTM- / G-) in CMP/trackers warnings to help locate the exact injection source.

= 1.6.55 =
* Privacy: add concrete fix guidance when CMP is “cosmetic” + list likely plugins injecting GA/GTM and link to Plugins page.

= 1.6.54 =
* Privacy: external services warning now checks the Privacy Policy page content; if services (e.g. reCAPTCHA/Analytics) are already mentioned, the row is marked OK and issues are reduced.

= 1.6.53 =
* Privacy: deep scan dropdown now reflects the last chosen limit (50–200) instead of resetting to 200.

= 1.6.52 =
* Privacy: auto-bust cached scan results after updates (schema/version in cache key), so “OK” rows no longer keep showing stale 0 values.

= 1.6.51 =
* Privacy: stronger CMP verification - refetch homepage with consent cookies (known CMPs) and compare “before/after” to detect cosmetic banners vs real blocking.

= 1.6.50 =
* Privacy: deep scan limit selector (50–200) + remember last scan mode/limit; clearer “OK” messages (e.g. CMP active) instead of showing 0.

= 1.6.49 =
* Plugin details: updated “About/Details” page and readme feature list to include the new Privacy module (deep scan + CMP effectiveness + issues list).

= 1.6.48 =
* Privacy: add “Deep scan” mode (50–200 pages) + stronger CMP detection (likely active vs cosmetic) and scan stats (scanned/planned + truncation).

= 1.6.47 =
* Privacy: add “Issues to fix” list (drilldown) - go flag-by-flag with View/Edit actions and filters; per-check counts now show correctly.

= 1.6.46 =
* Privacy: new “Privacy” module - technical site scan (sample pages) for policy links, common trackers/pixels, CMP/consent hints, forms notice hints, and mixed content, with evidence list.

= 1.6.45 =
* Licensing: clearer message when a key is bound to another site (“domain mismatch”).

= 1.6.42 =
* Purchase link: use lic_site without double URL-encoding so icomm.market checkout receives the site URL correctly.

= 1.6.40 =
* Purchase link uses dedicated icomm.market path `/icomm-lic-buy/` (fixes redirect to homepage from cache).

= 1.6.39 =
* Purchase button always visible in Settings (no secret file in ZIP required); links to icomm.market which signs checkout server-side.

= 1.6.38 =
* Plugin Details: new «רכישה» tab with price breakdown (600 ₪ + 18% VAT = 708 ₪/year); purchase form on icomm.market when market licensing is active.

= 1.6.37 =
* PRO purchase: buy button in Settings (708 ₪ incl. VAT) via icomm.market + Pelecard; automatic license activation after payment (`icomm-sh-market-secret.php` required in the plugin folder).

= 1.6.36 =
* License telemetry: daily ping to license.icomm.systems (install tracking; no license required).

= 1.6.33 =
* Plugin Details copy: customer-facing profile tone; removed negative phrasing; footer shows icomm systems link only.

= 1.6.32 =
* Plugin Details / shortcode layout: version meta column on the left, intro on the right; feature lists and tab body span full width below the meta column.

= 1.6.31 =
* Shortcode `[icomm_site_health_details]` / `[icomm_sh_details]` - public embed of the plugin Details page (RTL, no admin capability required).

= 1.6.30 =
* Licensing: Removed 7-day PRO trial - only the free base tier works without a license (broken links up to 500, WordPress Health, limited improvement plan).
* UX: PRO modules (Security, Performance, SEO) remain visible but do not run checks or actions until a license is active; locked preview lists what PRO includes.
* Security: Block SEO link fixes and quick fixes without PRO; no heavy SEO content scan on free tier.

= 1.6.29 =
* UX: Plugin «Details» modal - meta sidebar stays in a top row; description/install/FAQ body uses full width below (shorter scroll). Feature lists use two columns on wide screens.

= 1.6.28 =
* Docs: Expanded plugin description (about modal, readme) - full feature list per module, improvement plan, Elementor fixes, PageSpeed, quick fixes, FAQ; RTL layout in about modal.

= 1.6.27 =
* Fix "count stuck at 519": The old 500-link cap meant fixing links never lowered the total - new ones filled the slots. Removed the cap. Non-canonical issues are now grouped by PAGE (one row per page, e.g. "icomm SEO (12)") with a "תקן הכל (12)" button that fixes every bad link on that page at once - each fixed page removes one row and drops the warning count. After fix, the popup shows the new warning total and the list reloads fresh.

= 1.6.26 =
* Why warning count seemed stuck: On Elementor pages the scan was reading BOTH stale post_content HTML AND live _elementor_data - fixed links in Elementor still counted because the old HTML snapshot was rescanned. Elementor pages now scan only _elementor_data; after fix, post_content is regenerated from Elementor. Plan header now shows a breakdown (non-canonical links / missing alt / meta / other) so you can see which bucket drops when you fix items.

= 1.6.25 =
* Improvement plan count accuracy: Removed the old 100-item cap on non-canonical link tasks (now up to 500, filterable). Deduplicates the same link found in both post_content and Elementor on one page. Stops duplicate Google checks (shortlink/thin archives appeared twice). Skips aggregate SEO summary rows that duplicated per-item tasks. After «תקן», the plan list reloads automatically so the warning count drops immediately. SEO content scan raised from 100 to 500 pages.

= 1.6.24 =
* Elementor link fix actually works now: The fix tries all URL spellings Elementor may store (/?page_id=, http://domain/?page_id=, https://…, /index.php?page_id=, etc.) instead of only the form found in post_content. SEO detection now scans _elementor_data too. On Elementor pages, success requires a replacement inside Elementor meta - if only post_content matched, you get an error instead of a false "fixed". The success popup shows how many replacements were made in Elementor vs content.

= 1.6.23 =
* IMPORTANT safety fix for the Elementor link fix: 1.6.22 edited _elementor_data with a raw string replace and cleared Elementor's GLOBAL CSS cache, which could distort the page/site. The fix now edits Elementor data the safe way - JSON decode → replace only inside string values → JSON re-encode (structure-preserving; if the data isn't valid JSON it is left untouched) - and only clears THIS post's CSS cache (no global clear). If a page was distorted by 1.6.22, restore it via Elementor → History → Revisions, or Elementor → Tools → Regenerate Files & Data.

= 1.6.22 =
* "תקן" now persists on Elementor pages: The non-canonical link fix previously edited only post_content, so on Elementor pages the front end (rendered from _elementor_data) still showed the old link and the next scan brought it back. The fix now also rewrites the URL inside Elementor's _elementor_data meta (handling JSON-escaped slashes), clears the Elementor CSS/object cache, and only reports success when something was actually replaced.
* Cleaner suggested target: http:// links that also carry a ?page_id=/?p= now resolve straight to the clean pretty permalink (https) instead of just swapping the scheme, so the fixed link no longer reappears as a different non-canonical form.

= 1.6.21 =
* Respect noindex pages in SEO content checks: Pages explicitly marked noindex (Yoast / Rank Math / SEOPress / AIOSEO) are now skipped from the "Missing meta description", "Missing title", "Images without alt" and "Noindex in content" checks. Pages you intentionally hide from Google (dashboards, internal tools, etc.) no longer generate SEO nags. Extendable via the icomm_sh_post_is_noindex filter.

= 1.6.20 =
* One-click "תקן" (Fix) for non-canonical internal links: Each non-canonical link task in the improvement plan now has a Fix button. It shows a confirmation with the exact bad URL and the suggested clean permalink, and on confirm replaces the link directly in the page content (no need to open the editor and hunt for it). Handles both raw and HTML-encoded URL variants and reports how many occurrences were replaced.

= 1.6.19 =
* Thin tag/category archives check + one-click noindex: Detects tag and category archives with very little content (the classic "Crawled - currently not indexed" pages in Search Console) and offers a one-click fix that marks archives with up to 2 items as noindex,follow via the wp_robots filter (rich archives are untouched).
* shortlink / oEmbed exposure check + one-click disable: Detects the core shortlink (<link rel="shortlink" href="?p=...">) and oEmbed discovery links in <head> that leak ?p= duplicate URLs to Google, with a one-click fix to remove them from the head (existing embeds keep working).

= 1.6.18 =
* Non-canonical internal links check: New SEO check that scans page/post content for internal links pointing to non-canonical URL forms - ?page_id=, ?p=, ?attachment_id=, ?cat=, http:// (instead of https), and /trashed/ slugs. These are the shared root cause behind Search Console's "Page with redirect" and "Duplicate, Google chose a different canonical" buckets. The improvement plan lists each offending page with the bad link and the suggested clean permalink so you can fix it in the editor.

= 1.6.17 =
* robots.txt firewall/CDN challenge detection: The check now actively detects when /robots.txt returns an HTML challenge or "access denied" page instead of plain text (and HTTP 401/403/429/503 with an HTML content-type). It names the culprit when recognizable (Wordfence, Cloudflare, Sucuri, Imperva/Incapsula) and explains this is why Google/Lighthouse can't download robots.txt. The advice tells you to allowlist the /robots.txt path in that security layer and offers the one-click "Create physical robots.txt" fix.

= 1.6.16 =
* robots.txt "unable to download" handling: When the file isn't reachable (loopback/SSL/404/HTTP error), the advice now explains that if Google/Lighthouse also reports "unable to download a robots.txt file" it is a REAL problem (often a security plugin/firewall/cache or CDN blocking /robots.txt, or the virtual robots not being served), and offers a one-click "Create physical robots.txt" fix - a static file in the site root that bypasses cache/firewall/virtual-robots. No longer downplays a loopback failure as harmless.

= 1.6.15 =
* robots.txt validity (Lighthouse-style): Beyond reachability and full-site blocks, the check now validates the file contents - flags malformed lines, an Allow/Disallow that appears before any User-agent ("No user-agent specified"), patterns that don't start with "/" or "*", unknown directives, non-URL Sitemap values, non-numeric Crawl-delay, and files over 500KiB. The improvement plan lists the exact offending lines with tailored fix guidance.

= 1.6.14 =
* Cache plugin check: No longer reports "None detected" when a non-listed cache plugin is active. Detection now covers WP Rocket, Cache Enabler, Comet Cache, Breeze, SG CachePress, NitroPack and ezCache (uPress), plus a generic fallback that recognizes any active plugin whose slug contains "cache" and host-level page caching (advanced-cache.php / WP_CACHE). When found, the plugin name is shown.

= 1.6.13 =
* robots.txt check: Retries once before failing, and now distinguishes a true missing/blocked file from a server self-request (loopback/SSL) failure. Each case shows accurate, tailored guidance instead of a misleading "check for Disallow" message - eliminating false "Not reachable" alarms when the file is actually fine.

= 1.6.12 =
* Score: Site Score now reflects SEO content, performance, PageSpeed and plugin findings - derived from the same data as the improvement plan, so the score and the task count can no longer contradict each other (no more "100" alongside dozens of open tasks).
* SEO: Images missing alt are now de-duplicated by Media Library item - the same image used on many pages is listed once ("appears in N pages"), so fixing it once clears the whole group.
* Improvement plan: Removed the hidden 50-item cap so the count reflects the real number of issues.

= 1.6.11 =
* UX: Backup reminder now sits on a single line at the far left of the site header, aligned with the version line.

= 1.6.10 =
* Fix: Backup reminder no longer jumps above the Scan Center - removed the WordPress «notice» class that made WP auto-relocate it; it now stays inside the left side of the site header.
* UX: Site header is a clean two-column layout - site/license info aligned right, backup reminder on the left.

= 1.6.9 =
* Fix: «Images without alt» no longer flags images that already have alt text in the Media Library (resolves attachment by wp-image-{id} class or src and reads _wp_attachment_image_alt).
* UX: PageSpeed task is now actionable - its button opens the full Google PageSpeed report (concrete fix list) instead of a dead Settings link, and the duplicate read-only PageSpeed line was removed from the improvement plan.

= 1.6.8 =
* UX: After a scan finishes you return to the screen you launched it from (e.g. the Dashboard) instead of being forced to the Broken Links page; dashboard counts refresh immediately.
* UX: Removed the «פתח אתר» and «Speed test» buttons from the site header.
* UX: Backup reminder moved into the left side of the site header to save vertical space.

= 1.6.7 =
* Feature: «מרכז סריקות» (Scan Center) on the Dashboard - all scan types in one place with clear titles, descriptions and last-run times.
* Feature: «בדיקה חוזרת מהירה» (Quick re-check) - partial scan that re-checks only links already flagged as broken, without re-scanning the whole site (never prunes OK links).
* UX: «רענון בריאות ותוכנית שיפור» now clears the Dashboard, Google-readiness and improvement-plan caches and returns you to the screen you launched it from.

= 1.6.6 =
* Fix: «Run PageSpeed now» now works directly from the Dashboard - runs in-place via AJAX with a progress bar, no need to open Settings.
* UX: PageSpeed run sets the running state up front so polling no longer mistakes stale cached results for a fresh run.

= 1.6.5 =
* Fix: Opening «icomm site health» now lands on the Dashboard - a background link scan that finishes no longer redirects you to Broken Links. Only a scan you start manually opens the results page.

= 1.6.4 =
* Fix: WordPress.com speed test link - tool does not accept ?url=; click now opens the page and copies your site address to the clipboard for paste.

= 1.6.3 =
* UX: Backup reminder banner on all admin screens - recommend full site backup before scans and automated actions.

= 1.6.2 =
* Plugin audit: Elementor / Elementor Pro no longer flagged as «heavy» - page builders are standard, not optional bloat.

= 1.6.1 =
* Fix: Dashboard «תוכנית שיפור» card no longer shows 0 when plan cache was empty - builds task count on dashboard refresh.

= 1.6.0 =
* UX: Instant full-screen loading overlay on every icomm admin navigation click (dashboard cards, menu, buttons) - no blank white gap.
* UX: Improvement plan loads from cache instantly; cold cache builds in background via AJAX with visible spinner.

= 1.5.9 =
* GSC: Warn again when verification tag missing and site not marked verified; settings checkbox for DNS/already-verified in Search Console.

= 1.5.8 =
* Fix: Google Search Console check no longer warns when site is verified via DNS (only meta tag on homepage was detected before).

= 1.5.7 =
* Performance: Dashboard loads instantly from cache; first load or expired cache builds in background via AJAX with visible skeleton (fixes ~30s blank screen).
* Performance: Dashboard summary cached 15 min; no longer rebuilds full improvement plan on every dashboard visit; REST status cached 5 min.

= 1.5.6 =
* UX: In-content loading card with spinner and «המערכת עובדת» hint - flushed before heavy PHP so the admin area is never blank; full-screen overlay kept during scans.

= 1.5.5 =
* UX: Early loading overlay in admin head - spinner visible during slow page render and navigation (no blank white screen).

= 1.5.4 =
* Fix: after each scan, remove link rows that no longer exist in site content (manual editor fixes).

= 1.5.3 =
* UX: Full-screen scan overlay with spinner and progress - visible even if admin content briefly goes blank during long scans.

= 1.5.2 =
* Fix: Run scan no longer stuck on «preparing» - scan actually starts after click (1.5.1 regression).

= 1.5.1 =
* UX: Immediate feedback on all plugin actions - busy banner, button spinner, and progress bar before AJAX/redirect.
* Fix: Link scan shows “preparing” state instantly on click (no dead time before first status check).

= 1.5.0 =
* Feature: Plugin audit - inactive plugins, pending updates, active count, duplicate roles (cache/SEO/backup), known heavy plugins.
* UX: Server dashboard card shows type + version on two lines with clearer typography.

= 1.4.1 =
* Fix: HTTP 403/429 external links classified as warnings (blocked/rate-limited), not broken links.
* Fix: top-level admin menu click always returns to Dashboard.
* Fix: PageSpeed panel shows "Run PageSpeed now" when API key exists but no cached results yet.
* UX: Dashboard card shows detected web server (LiteSpeed / nginx / Apache).

= 1.4.0 =
* Feature: Improvement Plan page - prioritized actionable tasks from all modules.
* Feature: Quick fix - append Sitemap line to robots.txt when writable.
* UX: Dashboard and SEO link to Improvement Plan; removed unused Authority settings UI.

= 1.3.6 =
* Feature: Authority/Backlinks module scaffolding (provider + API key settings, UI placeholders).

= 1.3.5 =
* Fix: avoid infinite PageSpeed polling loop after background run completes.

= 1.3.4 =
* Fix: Run PageSpeed now runs in background (avoids 504/timeout) and the dashboard polls for completion.

= 1.3.3 =
* Fix: PageSpeed categories now requested correctly (no overwriting query args).
* UX: Run PageSpeed button is highlighted and shows a progress indicator on click.

= 1.3.2 =
* Fix: PageSpeed API request now fetches all Lighthouse categories (not performance-only).

= 1.3.1 =
* Fix: scheduled scan no longer blocks a single request for long periods (runs in steps).
* UX: PageSpeed rings shown only in Dashboard; Settings shows last result summary.
* UX: clearer messaging for PageSpeed/Lighthouse results and missing categories.

= 1.0.3 =
* Branding: icomm shown in lowercase in all user-facing strings (icomm site health)

= 1.0.2 =
* Fix Settings page PHP syntax fatal error
* Health checks: detail, recommendations, action links; SEO issues list with edit links
* Quick fixes: disable XML-RPC, create uploads/index.php

= 1.0.1 =
* Full icomm license server integration (activate/check, trial, plugin list links)
* Automatic updates via icomm-updates/v1/icomm-site-health (same as other icomm plugins)

= 1.0.0 =
* Initial MVP release
