Go to Studio

Fasterize SEO Recommendations

The Fasterize SEO Recommendations node applies advanced SEO recipes (CSS targeting, variables, datasets, CSR) to a Fasterize-accelerated site through the SEO Recommendation API.

What does the Fasterize SEO Recommendations node do?

The Fasterize SEO Recommendations node pushes advanced SEO recipes to the Fasterize SEO Recommendation API (/v2/configs/{id}/apps/seo-recommendation). Unlike Bulk SEO, which applies one rule per URL, this node sends recipe-based transformations with CSS selector targeting, variable substitution, dataset lookups, and optional client-side rendering (CSR). Each recommendation declares the URLs it applies to and the recipes that mutate the HTML at the edge.

Common use cases:

  • Injecting structured data (schema.org, OpenGraph) by selector across page templates without redeploying the origin.
  • Rewriting headings, anchors, or canonical tags driven by a per-URL dataset (titles, descriptions, internal links).
  • Running content-aware SEO experiments that depend on CSR to mutate dynamic HTML.
  • Rolling out template-level fixes (breadcrumbs, hreflang, robots) to a list of URLs in a single deploy.

Quick setup

Connect your Fasterize integration

Open the node settings and pick your Fasterize integration. If none exists, add the Fasterize API token in Settings > Integrations.

Provide the recommendations payload

Wire an upstream node (LLM, JSON Path Extractor, Text Input) that produces the recommendations JSON to the Recommendations input. The node accepts either a list of simplified recommendations, a single recommendation object, or the full Fasterize API export with settings.parameters.recommendations.

Run and inspect the response

Execute the workflow. The node returns the Fasterize API response as a dict. Use a JSON Path Extractor downstream to read which recipes were accepted or rejected.

Connect the output

Wire the output port to the next step (notification, logging, downstream LLM) and create a variable name on that node to capture the response.

Configuration parameters

Required fields

integration_id integration required

Fasterize integration — Selects the Fasterize workspace and API token used to authenticate the call. The token determines which Fasterize site the recipes are applied to.

recommendations string required

Recommendations (JSON) — The recipes payload. Three shapes are accepted and normalized internally:

  1. A list of simplified recommendations: [ { name, description, enabled, csr, datasets, variables, recipes, urls } ].
  2. A single recommendation object (with url, urls, or target.request_url.in). It is wrapped in a list automatically.
  3. The full Fasterize API export containing settings.parameters.recommendations — recipes are extracted and the target.request_url.in URL list is flattened into urls.

Each recommendation must expose at least one URL through url, urls, or target.request_url.in. An invalid JSON string raises an error before the API is called.

Tip

If the upstream node already returns a structured dict (for example a JSON Path Extractor or an LLM in JSON mode), wire it directly — the node serializes it for you. Only stringify the payload yourself when you need to edit it manually first.

What does the node output?

The node returns the raw response data from the Fasterize SEO Recommendation service. On success the response describes the recipes that were registered for the targeted URLs; on failure it returns a structured error dict that you can branch on.

output object

The Fasterize SEO Recommendation API response as a dict. Inspect it with a JSON Path Extractor or an LLM to count accepted recipes or surface per-URL warnings.

Error shape when the payload is missing or empty:

{ "error": "No recommendations provided" }

Error shape when the JSON is malformed:

{ "error": "Invalid JSON format for recommendations" }

Error shape when no URL field is found:

{ "error": "Recommendations must include 'url' or 'urls' field or 'target.request_url.in' structure" }

Error shape when the service call itself fails:

{ "error": "Failed to execute Fasterize SEO Recommendation" }

Usage examples

Example 1: Inject schema.org markup with a recipe

You want every product page in a list to receive a Product schema.org block, generated by an upstream LLM and injected through Fasterize without touching the CMS.

Configuration:

  • Fasterize integration: Production
  • Recommendations (JSON): wired from the LLM output

Input payload (simplified format):

[
  {
    "name": "product-schema-org",
    "description": "Inject Product JSON-LD on product pages",
    "enabled": true,
    "csr": false,
    "datasets": [],
    "variables": {},
    "recipes": [
      {
        "type": "html-target",
        "selector": "head",
        "position": "beforeend",
        "value": "<script type=\"application/ld+json\">{...}</script>"
      }
    ],
    "urls": [
      "https://example.com/product/widget-a",
      "https://example.com/product/widget-b"
    ]
  }
]

The node wraps the payload as needed and POSTs it to /v2/configs/{id}/apps/seo-recommendation.

Example 2: Forward a full Fasterize API export

You exported the live recommendations from another Fasterize environment and want to replay them in a target environment.

Configuration:

  • Recommendations (JSON):
{
  "installed": true,
  "settings": {
    "parameters": {
      "recommendations": [
        {
          "name": "blog-canonical-fix",
          "description": "Force canonical on blog category pages",
          "enabled": true,
          "csr": false,
          "datasets": [],
          "variables": {},
          "recipes": [
            { "type": "canonical", "value": "{{absolute_url}}" }
          ],
          "target": {
            "request_url": {
              "in": [
                "https://example.com/blog/category/news",
                "https://example.com/blog/category/guides"
              ]
            }
          }
        }
      ]
    }
  }
}

The node detects the settings.parameters.recommendations shape, extracts each recipe, and flattens target.request_url.in into the urls array before sending.

Common issues

The node returns: No recommendations provided

Cause: The recommendations input was empty, missing, or resolved to {}.

Solution: Verify the upstream connection feeding Recommendations. If the producer is an LLM, place a Find and Replace node before this one to strip Markdown fences (backticks) so the parsed JSON is not empty.

The node returns: Invalid JSON format for recommendations

Cause: The string passed to the node could not be parsed as JSON — typically a stray prefix, suffix, or unescaped character left by an LLM.

Solution: Pipe the LLM output through a Find and Replace or HTML Cleaner first, or wrap the generation step in a JSON-mode prompt so the model returns strictly valid JSON.

The node returns a missing url or urls field error

Cause: At least one recommendation in the payload has no targeting information — neither url, urls, nor target.request_url.in is present.

Solution: Ensure every recommendation declares the URLs it applies to. When converting from a Fasterize export, keep the target.request_url.in array intact; the node will flatten it for you.

Recipes are accepted but the page is unchanged in the browser

Cause: Fasterize caches HTML at the edge, so cached responses may still hide the new recipes until the TTL expires.

Solution: Trigger a Fasterize cache invalidation on the affected URLs after the call, or wait for the configured TTL before validating in the browser. For DOM mutations that depend on the live page, set csr: true on the recommendation so the recipe runs on the client.

Best practices and pitfalls

Tip

Validate the payload upstream. Run the JSON through a JSON Path Extractor or a small validation step before this node — Fasterize rejects the whole batch if a single recipe is malformed or references an unknown selector.

Warning

CSR has a runtime cost. Recipes flagged with csr: true execute in the browser and can shift layout or compete with hydration. Use CSR only when the targeted DOM is not available in the server-rendered HTML.

How does it fit into a workflow?

Fasterize SEO Recommendations is typically the last step in a recipe-generation pipeline that mixes structured data, dataset lookups, and LLM-drafted content.

graph LR
    Source[URL list] --> LLM[LLM drafts recipes]
    LLM --> FR[Find and Replace cleans JSON]
    FR --> Reco[Fasterize SEO Recommendations]
    Reco --> Notify[Email Sender notifies the team]