Resource icon

Beta LLMO SEO Indexing AI Addon 2.1.4 (my last try)

No permission to download
This latest version will be my final release. If you need functional development or further enhancements, please reach out to a more experienced XenForo developer.

This is my first add-on and I set the bar too highI’m sorry, but I can’t take it further as I don’t have the necessary expertise.
LLMO SEO — v2.1.0 Corrective Notes (English)

Scope
This release addresses packaging and metadata issues reported by XenForo’s Resource Manager: missing option groups, options, and routes, plus icon duplication and hashes placement.

Fixes & Additions
1) Option Group (NEW)
- Added _data/option_groups/llmoseo.json
- Group ID: llmoseo
- Title: “LLMO SEO” (order 1000)
- Purpose: Properly hosts all add-on options in Admin → Options.

2) Options (NEW, 5 items)
- Added _data/options/llmoseo_enable.json → on/off (default: true)
- Added _data/options/llmoseo_debug.json → on/off (default: false)
- Added _data/options/llmoseo_strip_pii.json → on/off (default: true)
- Added _data/options/llmoseo_cache_ttl.json → spinbox, positive integer (default: 3600)
- Added _data/options/llmoseo_route_whitelist.json → multiline textbox (default: threads/, forums/, resources/, members/)
- Each option is related to the llmoseo group with a display order.

3) Public Route (NEW)
- Added _data/routes/public/llmoseo_health.json
- Prefix: llmoseo/health
- Controller: Vendor\LlmoSeo\Pub\Controller\Health
- Action: actionIndex() → returns a simple “LLMO SEO OK” message.
- Purpose: Ensure the add-on defines at least one valid route, satisfying Resource Manager checks.

4) Controller (NEW)
- Added Pub/Controller/Health.php
- Minimal public controller implementing actionIndex() to support the health route.

5) Icon (CLEANUP)
- Single icon at add-on root: icon.jpg
- addon.json now references: "icon": "icon.jpg"
- Removed all duplicate icons under _data/ and non-JPG formats.

6) Hashes (COMPLIANCE)
- Generated checksums for all files.
- Provided in BOTH locations for compatibility:
• hashes.json (root, next to addon.json)
• _data/hashes.json

7) Version & Metadata
- addon.json bumped to version_string: "2.1.0", version_id: 2010000
- XenForo requirement unchanged: 2.3.7+.
- PHP compatibility unchanged: 8.4-ready.

Unchanged (for context)
  • Listeners: AppPubStart, TemplaterSetup, ThreadView, ResourceView, ForumView, UserView.
  • Services: Context (PageContextResolver, EntityExtractor, IntentClassifier); JsonLd (Builder + Types).
  • Templates: Public partial llmoseo_jsonld_* rendering a single <script id="llmo-seo" type="application/ld+json"> block.
  • CLI: llmo:validate (checks presence/size/valid JSON-LD).

Admin Verification Checklist
1) ACP → Add-ons → LLMO SEO shows icon and version 2.1.0.
2) ACP → Options → “LLMO SEO” group is visible with 5 options.
3) Front-end → /llmoseo/health displays “LLMO SEO OK”.
4) View Source on a thread page → JSON-LD block present in <head>.
5) Optional: run CLI validator or Google Rich Results test to confirm schema.

Upgrade Notes
  • Safe to install over prior versions; options will appear under the new “LLMO SEO” group.
  • If you previously relied on duplicate icons or hashes locations, the new structure standardizes them while retaining compatibility by keeping hashes at both root and _data.

Troubleshooting
  • If the health route 404s, flush caches and rebuild the master data (ACP → Tools).
  • If options do not appear, confirm the presence of data/option_groups/llmoseo.json and all _data/options/llmoseo*.json files in the installed package.
This version is only for test.

I have not test it
  • Like
Reactions: PhineasD
You will need to go into PhpMyAdmin to execute the following query in order to ensure there are no duplicate entries in the Listener after installing the Add-on, and to make sure the correct Listener is used in XenForo.

Open your database and click on the SQL tab. Then copy and paste the following query into the field labeled "Run SQL query/queries on server 'localhost'", and click the Execute button:

Code:
DELETE FROM xf_code_event_listener
WHERE event_id = 'template_post_render'
  AND callback_class <> 'Sylvain\\LlmoproV313\\Listener\\Template';

INSERT INTO xf_code_event_listener
  (event_id, execute_order, description, callback_class, callback_method, active, addon_id, hint)
VALUES
  ('template_post_render', 10, '', 'Sylvain\\LlmoproV313\\Listener\\Template', 'templatePostRender', 1, 'Sylvain/LlmoproV313', '')
ON DUPLICATE KEY UPDATE
  active = VALUES(active),
  execute_order = VALUES(execute_order),
  callback_method = VALUES(callback_method),
  description = VALUES(description),
  hint = VALUES(hint);

Note: I have tested this query and it works perfectly.
  • Like
Reactions: PhineasD
Uninstall previous version and clear template cache before installing this version
  • Like
Reactions: GameNet and akok
Back
Top Bottom