# ProductContent AI: Settings, Tips and Troubleshooting

> Content scoring, queue processing, integrations, advanced configuration, best practices, and answers to common problems.

---

This page is part of the [ProductContent AI guide](/docs/productcontent). Start there for what the extension does, installation and the frequently asked questions.

## Content Scoring

ProductContent AI can score enabled catalogue products from 0 to 100. Scored areas cover descriptions,
product titles, SEO metadata, technical SEO, images, identifiers, price and stock, attributes, buyer questions,
buyer information, structured data, uniqueness, internal links and fact checking. The available checks depend
on your plan and product data. Feed consistency, review summaries, SmartListings and AI discovery are advisory
reports and do not add or remove score points.

- Scores appear as colour-coded chiclets in the Products & Drafts grid: green (high), amber (mid), red (low), grey (not yet scored).
- Scores are recalculated every 6 hours by default (`moogento_productcontent/scheduled_jobs/score_recompute_cron_expr`). You can also trigger a recompute from the command line - the command needs a target: `php bin/magento moogento:productcontent:score:recompute --all` for the whole enabled catalogue, or `--product-id=123` for one product. Add `--store-id=` to pick a store view.
- Feed-consistency findings flag identifier and copy issues for review. They are report-only and do not add or
  subtract points from the content score. SmartListings signals are also report-only; they can inform queue priority
  when the integration is enabled.
- When a draft estimate is available, compare the current score with the proposed score before publishing. A dimmed
  earlier score can show the copy before ProductContent AI first changed it, measured using today's scoring rules.
  An estimate covers only the areas the preview can assess. A partial estimate is not a promise that every image,
  attribute or storefront result has been checked. Read a no-gain note before regenerating just to raise a number.

---

## Product Edit Tab

A **ProductContent AI** tab appears on every product edit page. Its status fields are read-only: **Status**, **Content score**, **Generation status**, **Image status**, **Attribute status**, **Approval state**, **Last scored**, **Latest drafts** (the 10 most recent) and **Verified evidence sources**. A **Create with ProductContent** button opens the guided workflow for that product.

Below those, six editable fields hold per-product prompt overrides that apply only to this product: **Content prompt addendum**, **Style 1 image prompt addendum**, **Style 2 image prompt addendum**, **Merchant notes**, **Excluded claims** and **Required phrases**.

---

## Visitor view-count tracking

ProductContent AI counts storefront product page views over a rolling 30 days (`view_count_30d`) as a lightweight traffic signal for the feedback loop, using a first-party cookie named `pcai_vc` to avoid over-counting repeat visits from the same browser within the cooldown window.

- Cooldown length is `moogento_productcontent/general/view_count_cooldown_seconds` (default 300). It has no admin field - change it with `bin/magento config:set`.
- The cookie is never set or read when your store's **Stores > Configuration > General > Web > Default Cookie Settings > Cookie Restriction Mode** is enabled and the visitor hasn't consented. View counting still increments server-side in that case - only the per-visitor cooldown falls back to a request-level guard.
- Stale view counts reset automatically: any product not viewed in 30 days has its counter zeroed by the View Count Reset schedule (see Advanced configuration below).

---

## Queue Processing

The generation queue runs on Magento cron. The default schedule processes jobs every minute. Queue behaviour has no admin screen - these are module defaults, changed with `bin/magento config:set <path> <value>` followed by `bin/magento cache:clean config`:

| Setting | Config path | Default |
|---|---|---|
| Batch Size | `moogento_productcontent/queue/batch_size` | 10 |
| Item Timeout (seconds) | `moogento_productcontent/queue/item_timeout_seconds` | 600 |
| Stuck Threshold (minutes) | `moogento_productcontent/queue/stuck_threshold_minutes` | 15 |
| Max Retry Attempts | `moogento_productcontent/queue/max_retry_attempts` | 3 |
| Inter-call Delay (ms) | `moogento_productcontent/queue/inter_call_delay_ms` | 0 |

Background queue processing itself needs a Growth or Pro plan. The values above are not individually restricted.

---

## Module: Integrations

Connect ProductContent AI to other Moogento modules for smarter queue prioritisation.

**SmartListings Priority Boost** (`moogento_productcontent/integrations/enable_smartlistings_priority`, off by default, Growth/Pro) - when enabled, products that belong to a SmartListings boosted rule are moved to the front of the content generation queue. The boost value is set at `moogento_productcontent/scheduled_jobs/sc_priority_boost` (default 10 points). Requires **SmartListings** to be installed.

**AnalyticsEasy Feedback Loop** (`moogento_productcontent/integrations/feedback_loop_enabled`, off by default, Growth/Pro) - when enabled, a daily cron job identifies products with high sales velocity (above the configured minimum) and a content score below the configured threshold, then raises their queue priority. Requires both **AnalyticsEasy** and **ProfitEasy** to be installed.

**GTIN Attribute Codes** (`moogento_productcontent/integrations/merchant_center_attribute_csv`) - comma-separated list of attribute codes checked for GTIN presence in feed-consistency scoring (default: `ean,upc,isbn,gtin`).

**MPN Attribute Code** (`moogento_productcontent/integrations/mpn_attribute_code`) - attribute code for Manufacturer Part Number, checked in feed-consistency scoring (default: `mpn`).

---

## Photos found during research

Photos found during research are used as references for generated images and for writing copy; they are never added to the product gallery. Photos that include a person, or that show another colourway, are not used as references.

## Advanced configuration

### Scheduled Jobs

Background jobs use configurable cron schedules. They have no admin screen - change one with `bin/magento config:set <path> "<cron expression>"` then `bin/magento cache:clean config`.

| Job | Config path | Default |
|---|---|---|
| Queue Process Schedule | `moogento_productcontent/scheduled_jobs/queue_process_cron_expr` | Every minute |
| Score Recompute Schedule | `moogento_productcontent/scheduled_jobs/score_recompute_cron_expr` | Every 6 hours |
| Queue Cleanup Schedule | `moogento_productcontent/scheduled_jobs/cleanup_cron_expr` | Every 15 minutes |
| Image Draft Purge Schedule | `moogento_productcontent/scheduled_jobs/image_purge_cron_expr` | Every 15 minutes |
| Feedback-Loop Refresh Schedule | `moogento_productcontent/scheduled_jobs/feedback_loop_cron_expr` | 3am daily |
| Score History Cleanup Schedule | `moogento_productcontent/scheduled_jobs/score_history_cleanup_cron_expr` | 3am daily |
| View Count Reset Schedule | `moogento_productcontent/scheduled_jobs/view_count_reset_cron_expr` | 2am daily |
| Queue Purge Schedule | `moogento_productcontent/scheduled_jobs/queue_purge_cron_expr` | 4am daily |
| Usage Reservation Cleanup Schedule | `moogento_productcontent/scheduled_jobs/usage_reservation_cleanup_cron_expr` | Every 30 minutes |
| Attribute Suggestion Purge Schedule | `moogento_productcontent/scheduled_jobs/attribute_suggestion_purge_cron_expr` | 5am daily |
| Fact Check Re-check Schedule | `moogento_productcontent/scheduled_jobs/fact_check_recheck_cron_expr` | 6am daily |
| Fact Check Purge Schedule | `moogento_productcontent/scheduled_jobs/fact_check_purge_cron_expr` | 6:30am daily |

**Score History Retention** (`moogento_productcontent/scheduled_jobs/score_history_retention_days`, default 90, clamped 7-365) - score snapshot rows older than this value are deleted by the cleanup cron. Reduce this if the `moogento_productcontent_score_history` table grows too large on high-volume stores.

**Queue Row Retention** (`moogento_productcontent/scheduled_jobs/queue_retention_days`, default 14, clamped 1-365) - done and failed queue rows older than this many days are deleted by the Queue Purge cron. The Image Draft Purge cron uses **Draft Retention** (`moogento_productcontent/image_generation/draft_retention_days`) instead, covered under "Set up AI image generation" above.

#### Notes

- Schedules are read straight from the module's `config.xml`, so nothing needs to be written to the database for a job to start running. Run `php bin/magento setup:upgrade` and `cache:clean config` after deploying an update so Magento picks up any changed defaults.
- Scheduled job settings are default-scope only - they cannot be overridden per website or store view.

---

### Developer Mode Tier Override

On a development install, the license server typically returns no valid license, which restricts the module to Seed tier and blocks Growth/Pro features. Use the developer-mode override to test higher-tier features locally without network access to the license server.

#### Setup

```
php bin/magento config:set moogento_productcontent/dev/force_tier pro
```

Accepted values: `seed`, `growth`, `pro`. Leave blank to use the live license check.

#### Notes

- The override is active **only** when `MAGE_MODE=developer`. It is a no-op on production and staging, so the setting is safe to leave configured in a developer `env.php`.
- This setting survives `cache:clean` (unlike the cache-priming snippet in the AI guide). Re-run `cache:clean config` after changing it so Magento picks up the new value.

---

## Tips & best practices

- Start with a small product batch. If you use your own provider, validate its API key and required roles before generating.
- Write store prompts before generating your first batch. Drafts already in the queue use the prompt that was active when the job ran - changing prompts mid-batch produces inconsistent output.
- Leave **Preserve existing merchant content** (`moogento_productcontent/content_generation/preserve_existing`, on by default) set to Yes when you have products with hand-written descriptions you want to keep. It only matters once **Publish without review** is on: a field that already holds content is then held back for your review instead of being published automatically. It does not stop the AI drafting for that field - you still get a draft to compare.
- Map templates to categories before running bulk generation. Without a template, the module falls back to a minimal single-section built-in - category-specific templates produce significantly better output.
- Keep **Draft Retention** short enough that your `pub/media/moogento/productcontent/drafts/` directory doesn't grow unbounded, but long enough for your review cycle. 30 days is a reasonable default for most teams.
- The feed-consistency score flags (missing GTIN, MPN, ALL-CAPS copy, broken HTML) are worth fixing directly in the product data rather than instructing the AI to work around them. Clean source data produces better drafts.
- If you use multiple providers across roles in own-provider mode, validate each connection after adding it.

---

## Troubleshooting

### Content jobs are queued but nothing is generated

Jobs sit in `pending` state and never move to `processing` or `done`.

- **Cause:** Magento cron is not running, or the `default` cron group is not being processed.
- **Check:** Run `php bin/magento cron:run --group=default` manually and watch the output. Check `var/log/moogento_productcontent.log` for job dispatch messages.
- **Resolution:** Set up Magento cron on the server if it isn't running. Confirm that `crontab -l` shows a cron entry calling `php bin/magento cron:run`.

---

### The AI provider Validate button shows a red message

Clicking Validate on a provider row returns a red message.

- **Cause:** The API key is incorrect, the model name is wrong, or the provider endpoint is unreachable.
- **Check:** Read the validation message and confirm the key has access to the selected model and any image roles.
- **Resolution:** Correct the key or model, save, and validate again.

---

### Image drafts are not appearing in the review modal

Image generation jobs complete successfully but the Images tab in the review modal is empty.

- **Cause:** Your plan's per-product image cap is already reached - 6 on Growth and Pro, 1 on Seed - counting reserved, draft, approved and applied images combined. Or the image provider role is not assigned.
- **Check:** Check `moogento_productcontent_generated_image` for rows with this `product_id`. If the number of rows with status `reserved`, `draft`, `approved` or `applied` has reached your plan's cap, no new draft can be created.
- **Resolution:** Reject or delete existing draft/applied images for the product to free up capacity, then re-queue.

---

### Content scores are not updating

Products show the same score after you update their descriptions.

- **Cause:** The score recompute cron hasn't run since the change, or the module is disabled.
- **Check:** Check the schedule at `moogento_productcontent/scheduled_jobs/score_recompute_cron_expr` (default: every 6 hours). Check whether the module is enabled at `moogento_productcontent/general/enable`.
- **Resolution:** Run `php bin/magento moogento:productcontent:score:recompute --all` (or `--product-id=123` for a single product) to queue a manual recompute, then let cron run and reload the Products & Drafts grid.

---

### Drafts were applied but the product page hasn't changed

An approved draft shows status `applied` but the storefront still shows the old content.

- **Cause:** Magento's full-page cache is serving the old cached version.
- **Resolution:** Run `php bin/magento cache:clean full_page` or flush the cache for the affected product pages from the Cache Management admin page.

Template changes do not need this: saving or deleting a template, changing which products use it, or accepting a template suggestion refreshes the cached product pages for you.

### Tiny description

The tiny description is a single line of product copy, capped at 60 characters and 8 words, for places where a
full short description will not fit - a cart panel, a comparison row, a compact listing tile.

It is on by default and is written in the same request as the rest of the page copy. To stop it, remove **Tiny description**
under Stores > Configuration > Moogento > ProductContent AI > Content: Images & copy > Fields to generate.

By default the approved text is written to a product attribute called `tiny_description`, which the module
creates for you. If you already have your own text or textarea attribute for this, pick it in **Tiny description
attribute** in the same section. Only your own text and textarea attributes are offered - the product name, SKU,
URL key, prices, stock fields, and the fields that already receive their own drafts can never be selected, and a
value written directly into the database rather than through this form is refused the same way.

Every tiny description is checked before it can be approved or applied. It must be one line of plain text within
the caps, must not use marketing words like "premium" or "best", and must only repeat facts already on the
product. Anything that fails stays in the review queue with the reason shown on the draft, and cannot be applied
until it is edited into shape. Changing the attribute mapping later affects new drafts only: an existing draft
keeps writing to - and reverting on - the attribute it was generated for.

## Configuration overview

From **ProductContent AI > Config.**, get a quick readiness check and links to all setup areas in one place.

The top section shows readiness for content generation, research, and image generation. In managed mode the guided provider step reads **Moogento AI is ready**; in own-provider mode, connection readiness reflects the configured provider roles. The overview also shows when connections were last checked.

The separate usage panel on **Products & Drafts** and in the **Stores > Configuration > Moogento > ProductContent AI** header shows remaining monthly generations. In managed mode it includes the reset date and an **as of** time if the snapshot is stale. In own-provider mode it shows local counters and limits.

Below that, the configuration sections link to:
- **Templates** - create and map product page templates to categories
- **Attribute rules** - manage which attributes the AI audits and generates
- **Feature highlights** - turn key attributes into reusable selling points (if enabled)
- **System configuration** - open the full admin config screen for providers, generation behaviour, budgets, and logging

Click **Reopen setup** to restart the first-time setup wizard. In own-provider mode, **Manage connections** opens the providers table.

### Monthly plan allowances

| Plan | Moogento AI products | Moogento AI images | Own-provider products | Own-provider images | Images per product | Product audits |
|---|---:|---:|---:|---:|---:|---:|
| Seed | 15 | 3 | 25 | 10 | 1 | 100 |
| Growth | 60 | 10 | 100 | 40 | 6 | 500 |
| Pro | 150 | 25 | 250 | 100 | 6 | 2,000 |

All allowances are monthly on monthly and annual subscriptions. There are no yearly pools.

### AI data privacy

Moogento AI uses zero data retention. Prompts are not logged and are not used for training. If you use your own provider, review that provider's privacy terms for its processing of your requests.

---

## Other pages in this guide

- [ProductContent AI overview, installation and FAQs](/docs/productcontent)
- [ProductContent AI: Generate and Review Product Copy](/docs/productcontent-generate-and-review)
- [ProductContent AI: Images, Variants and Workspace](/docs/productcontent-images-and-workspace)
- [ProductContent AI: Templates, Attributes and Specs](/docs/productcontent-templates-and-specs)

<!-- docs-split: part-of="productcontent" -->
