Personyze Wiki Personyze Wiki docs
English
Open Personyze
Docs/ Recommendation Setup & Feeds/ Crawl Your Site — Build the Product or Content Catalog From Your Own Pages
Recommendation Setup & Feeds

Crawl Your Site — Build the Product or Content Catalog From Your Own Pages

Build the Product or Article Catalog by crawling your own site: where Crawl my site is, every setting, what it reads on its own and what to map, progress, schedules and plan limits, what…

18 min read Updated 21 hours ago

When there is no feed to load, Personyze can build your Product Catalog or Article Catalog from your own site. It finds your item pages through your sitemap or your links, reads the details each page already publishes for search engines — name, picture, price, stock — and reads them again on the schedule you choose, so the catalog stays current. Every account has it; there is nothing to switch on first.

Start small. Set Page limit to 50, press Crawl now, and look at Progress and at the items that arrived. Raise the limit once the right pages are read as items.

When to use it

  • No feed. Your platform will not export one, or nobody keeps it up to date.
  • A feed with gaps. Keep the feed and let the crawl add only the items it misses — see Add only new product pages.
  • A content site. Blogs, magazines and help centres: the crawl reads article pages the same way — see Products and articles.

When you do have a feed or a store, prefer it: it carries every field your system knows, with no page reading in between. Shopify, WooCommerce, Magento and BigCommerce connect under Sync my store on the catalog screen; feeds are on Setting the Product / Content Feed and Uploading Feeds & Data Files.

Where to find it

Three ways in, all to the same dialog:

  • Product Catalog → ⋯ (More options) → Crawl my site — discover and queue product pages. On the Article Catalog the entry reads … article pages. On the older catalog screen it is under Data settings.
  • Add a source → We read your site → Continue → Open the crawl settings — the catalog’s setup, which then checks the items as a shopper sees them.
  • Once a crawl has a schedule or has run, it is listed under Where your products come from as Site crawl. Click the row, or its gear, for the settings.
The Product Catalog menu with Crawl my site at the bottom
The catalog’s ⋯ menu. Crawl my site is the last entry; on the Article Catalog it ends in article pages. Click to enlarge.

The settings

The Crawl my site dialog with all its settings
Crawl my site on a product catalog, filled in before a first crawl. The line in amber under Page limit is the plan’s own cap. Click to enlarge.

There is no separate Save: Crawl now saves what is in the dialog and starts a crawl, and Close leaves without saving.

Setting What it does
Start pages Where the crawl begins, one URL per line, each a full https:// address. A section index or a sitemap usually finds more than the homepage. Give a sitemap (an address ending in .xml, or with sitemap in it) and only the sitemaps you list are read. Otherwise Personyze reads the sitemaps your robots.txt declares, then /sitemap.xml and /sitemap_index.xml, and with no sitemap at all, the links on your start pages. Sitemaps listed inside other sitemaps are followed. The crawl stays on the sites of your start pages; www. and the bare domain count as one.
Item URL pattern A regular expression matching your item page URLs, written against the address without its https: — //shop.com/products/blue-coat. Pages that match are queued first, so the page limit is not spent on category pages that come first in a sitemap. A matching page is read as an item even when it carries no product markup. It orders the queue; it does not drop pages that do not match. When your tracking setup already has exactly one such pattern, the field is filled from it, marked Suggested from your product tracking setup — check it matches your item pages.
Page limit Stops the crawl after this many pages (1,000 when empty), listing pages included. Your plan may cap it, and the dialog says so, for example Your plan caps this at 5,000 pages. A higher number is saved, but the crawl stops at the plan’s limit. See Limits.
Re-crawl schedule Off — only when you click Crawl now, Daily, Weekly or Monthly. What each run reads is under Schedules. A choice your plan does not allow is greyed out.
Unpublish product pages that no longer exist
Unpublish missing product pages
When a page answers “not found”, its product is set out of stock (an article is unpublished). It happens only after a crawl that read every page it queued; a crawl cut short by its page limit or an error unpublishes nothing. Off by default — then a missing page only shows as a failed row in Progress.
Read pages in a real browser For sites that build their pages with JavaScript. Slower, and it covers far fewer pages per crawl — see Sites built with JavaScript. Shown only on plans that include it.
Add only new product pages
Only add pages not already in your catalogue
For a catalog a feed already fills. A page whose address is already in your catalog is skipped, so nothing your feed owns is changed. Items an earlier crawl added are still kept up to date. When a crawl starts, the dialog says how many pages were already there and left as they are.
Do not add out-of-stock product pages
Only add product pages that are in stock
Products only. A page that says out of stock, or has no price, is not added. It decides only whether an item is added: an item already in your catalog still has its stock updated. Leave it off to add every product page — out-of-stock ones still show “also viewed” on their own page and are never recommended.
Use the page’s own SKU as the item id
Match your feed’s product numbers, when the page has one
Uses the SKU from the page’s structured data as the item id instead of one built from the address, so a product your feed also carries lands on the same item instead of a duplicate; an item your feed holds is left to the feed. A product your site serves at two addresses stays one item, and one that moved to another address keeps its item. A page with no SKU keeps an id from its address, and pages that share one SKU, such as colour variants, are not merged. Turned on after a crawl has run, it changes those items’ ids to their SKUs, and views recorded under the old ids stop counting toward them.
Force a full re-crawl instead Saves the settings and re-reads every page, including those already read. Worth it after you change the Item URL pattern, or when your pages change shape; otherwise Crawl now is faster and lighter on your server.

Under the settings sit three panels, each opened by its bar: Field mapping, Tracking suggestions and Access credentials. Progress is at the bottom.

What arrives on its own, and what to map

Personyze reads the details your pages publish for search engines; it does not guess from how a page looks. For each field it takes the first of these that has it:

  1. Structured data — schema.org Product details (articles: Article, NewsArticle or BlogPosting) in the page’s JSON-LD. The most reliable, and what Google reads.
  2. Microdata — the same schema.org details written as itemprop attributes in the HTML.
  3. Open Graph and meta tags — og:title, og:image, product:price:amount and the like.
Catalog Filled on its own
Products Title, description, main image (the first, when several are listed), brand, price, in stock, rating and number of reviews. The page’s address becomes the item’s link.
Articles Title, description, main image, author, topic and publish date. The topic is the page’s section; when it names none, the folder in its address — /news/reviews/… becomes Reviews.

Rules it applies:

  • No price means out of stock. The item keeps its page — shoppers there still see “also viewed” — but it is never recommended. A price that appears only as text, with no structured data behind it, cannot be read, so such products arrive out of stock. Adding schema.org Product data to your product pages fixes it, and it is the same data Google uses for rich results.
  • The SKU is read but not stored as a field. It is used only as the item id, when Use the page’s own SKU as the item id is on.
  • Not read: categories, a was-price (the struck-through one), the currency (set how prices print under ⋯ → Price formats), and anything particular to your site. Read those with Grab columns from site (same ⋯ menu), which reads values off each item page with CSS selectors; they then show in Field mapping. A card shows the higher of Price and Sale Price as the price before discount, so a was-price read into Sale Price shows as the discount.
  • Your site’s own details — its logo, its name — are never taken as an item’s name, image, brand or price.
  • A page marked up as an article is never stored as a product, and a page marked up as a product never as an article.
  • A page that answers with a login prompt instead of the item is not added — see Private and members-only sites.
Check before you map. Crawl once with a small page limit and look at the items in the catalog. Most shops publish structured data, so title, picture, price and stock often need no mapping at all.

Field mapping

For fields the crawl does not read. Field mapping lists the custom fields set up under Grab columns from site, and points each one at a source:

Where it is read from Use it for
A CSS selector on the page The default. A value shown on the page, with an optional attribute.
A segment of the page’s own URL A value that lives in the address, such as a department folder.
Always the same fixed value The same value on every item.

Two more sources are listed — the page’s JSON-LD and a meta tag — with not read yet, so a field set to it stays empty; do not choose them. Value found and Sample page show what the last crawl found on one sample page. Add field adds a row, and nothing is saved until Apply. A field you set here is never changed by a crawl.

When fields that used to be found come back empty on most pages, the panel says These fields used to be found but came back empty on most pages of the last crawl — the site may have changed, or a rule below may need updating, and names them. Usually the site’s design changed: update the selector.

Tracking: what makes crawled items count

A crawled item is recommended — and anchors “people who viewed this also viewed” — only once Personyze records which item each visitor views. When nothing records that yet, the dialog and the Site crawl row say Visits to these pages are not tracked yet, so they cannot anchor or appear in recommendations., with Set up tracking, which opens Product tracking (Article tracking on a content catalog). See Product Interaction Tracking.

The item id is built from the page address, so visits to a crawled page are matched to its item with no id to map. If your tracking reports a SKU instead, turn on Use the page’s own SKU as the item id.

Tracking suggestions reads a handful of pages your last crawl read, and suggests tracking to add: a product page viewed, added to cart or saved to favourites (articles: an article read, a comment), and goals that count a click or a visit. Each comes with Why and Seen on. Press Get tracking suggestions; every box starts unticked, and nothing is written until you tick one and press Apply. One that already exists is reported as Already set up — nothing changed.

Progress and results

After Crawl now, a line under the buttons says what happened — for example 25 pages queued (found via the sitemap). Watch their progress below., or Nothing new — every page already found is queued or done. It also counts pages skipped because their address is too long to store, and, with Add only new product pages on, pages already in your catalog and left as they are.

Progress, at the bottom of the dialog, shows how many of the queued pages have been read (… of …), how many failed, and Everything read at the end, with a row per page:

Column Shows
URL The page.
Kind Item becomes a catalog item. Listing is only read to find item pages on it.
Status Queued, Reading, Read or Failed. A failed page names its reason underneath.

It updates by itself every few seconds while pages wait; Refresh looks at once. You can close the dialog — the crawl goes on in the background, reading one page at a time from your site, at most one a second. A few thousand pages take an hour or more.

On the catalog screen, the Site crawl row shows the schedule that runs (Runs daily, Runs weekly, Runs monthly or Paused), how many items it has read, Last run, and a pill: On, Paused or Failing. A paused crawl offers Turn on, which opens the settings to choose a schedule; a failing one opens with the reason and the page list, and offers Check. Its ⋯ menu holds View crawl and settings and Crawl settings.

Schedules

What starts it What it reads
Crawl now Pages not read before, pages whose sitemap date (lastmod) is later than their last read, and pages that failed.
The Re-crawl schedule (Daily, Weekly, Monthly) The same, plus every page last read about one period ago or more — so prices and stock stay current even on a site whose sitemap carries no dates.
Force a full re-crawl instead Every page again.

A scheduled crawl that cannot reach your site waits longer before each try, up to a week (or one period, on a monthly schedule). The dialog says so under the schedule: … scheduled attempts in a row could not reach your site (the reason). It is backing off, waiting longer between tries each time.

Limits

The crawl reads other people’s servers from Personyze’s own address, so it runs inside limits the server applies whatever the dialog holds:

  • Pages per crawl, by plan. Shown under Page limit; a higher number is saved but not used. 20,000 pages is the most on any plan, and a crawl in a real browser reads 200 pages unless Personyze has raised it for your account.
  • The fastest schedule, by plan. Faster choices are greyed out, with Your plan only allows a re-crawl every … days at most. The Site crawl row shows the schedule that actually runs.
  • Polite reading. Your robots.txt is obeyed. Each site is read one page at a time, a second apart, and only a set number of sites are crawled at once across all accounts. Only https:// addresses are read.
  • Sites that keep refusing. When one site answers 401, 403 or 429 to 100 pages in a row, the rest of that crawl on that site is held — see Sites that block crawlers.

Sites that block crawlers

Many sites put a bot filter in front of their pages — Cloudflare, an AWS firewall, a rule at the hosting company. It answers our crawler 403 (Forbidden) while the same page opens fine in your browser. The crawler names itself and never pretends to be a browser, so the fix is a rule on your site that lets it through. It takes a couple of minutes.

How you see it:

  • When a crawl starts: Your site blocked our crawler (403). Allow this user-agent and try again: Personyze catalogue crawler; +https://www.personyze.com/
  • On a page in Progress: Blocked by the site’s bot protection (403). Allow our crawler: …
  • After 100 refusals in a row: Not requested: the site refused our crawler on 100 pages in a row, so the rest of this crawl was held. Allow our crawler (Crawl settings show how), then click Crawl now. Those pages are tried again on the next crawl.

Crawl blocked or returning 403? What to allow, under Start pages, says what to let through. It opens by itself once any page came back 403.

The crawl help box listing the header, user-agent and address to allow
Crawl blocked or returning 403? What to allow, opened. The header’s value is your account’s own, with a copy button; it is hidden in this picture. Click to enlarge.
Allow Value Why this one
The header (best) X-Personyze-Crawl-Token with your account’s own value, from the box. Sent on every crawl request, and only to your own site. Keeps working if our address changes.
The user-agent Personyze catalogue crawler; +https://www.personyze.com/ Works in a firewall rule and in robots.txt.
The address The IP shown in the box. Simplest to write, but has to be changed if our address ever does.

Cloudflare: Security → WAF → Custom rules → Create rule, match the header, set the action to Skip, then tick All remaining custom rules, All managed rules and All Super Bot Fight Mode rules. The free Bot Fight Mode cannot be skipped by any rule: turn it off, switch to Super Bot Fight Mode, or allow our address with an IP Access rule (Security → WAF → Tools), which is checked before it.

robots.txt

Pages your robots.txt disallows for our crawler are never queued. A group that names the crawler is used instead of the * group, so this lets it read everything:

User-agent: Personyze
Allow: /

Any Disallow you want kept for us goes into that same group.

A 401 — Those pages need a login (401) at … — is a login wall, not a bot filter: see the next sections.

Sites built with JavaScript

Some shops and magazines build their pages in the browser after loading. A plain read then finds an empty shell: the crawl finds no items, or items with no name or price. Read pages in a real browser opens each page in a browser and reads what it renders.

  • Try without it first. Many sites built that way still publish structured data in the page itself, and a plain read is many times faster.
  • It reads 200 pages per crawl, whatever Page limit says, unless Personyze has raised that for your account; and it is slower page by page.
  • The switch shows only on plans that include it.

Private and members-only sites

Access credentials, the third panel in the dialog:

  • Cookie or API header — a header name (for example Cookie or X-Api-Key) and its value, for pages behind a login a cookie can get past, or an API that needs a key. It is sent with every crawl request to your own site, and never along a redirect to another domain. The value is never shown again: the panel only says A value is stored. — Replace or Delete it. A session cookie stops working when it expires; paste a fresh one.
  • Form login (not used yet) — stores a login page URL, a username and a password for later. Personyze does not sign in to your site with them yet, so nothing is read with them today.

A page that answers with a login prompt instead of the item — a title such as “Login Required” — is not added. Progress shows This page asks for a login, so it is not public and was not added. It is tried again on later crawls, in case it becomes public.

Products and articles

Product Catalog Article Catalog
Menu entry Crawl my site — discover and queue product pages Crawl my site — discover and queue article pages
Reads schema.org Product, then Open Graph schema.org Article, NewsArticle or BlogPosting, then Open Graph
Fills Title, description, image, brand, price, stock, rating, reviews Title, description, image, author, topic, publish date
A page that no longer exists Set out of stock Unpublished
Do not add out-of-stock … Yes Not shown — articles have no stock

Either way, a page that answers again on a later crawl comes back on its own: the article is published again, the product’s stock is read again.

Troubleshooting

What you see Why, and what to do
Your site blocked our crawler (403)…, or Blocked by the site’s bot protection (403) on pages A bot filter on your site. Allow the header, the user-agent or the address — Sites that block crawlers.
No readable pages were found on that site The start pages gave nothing to follow. Give your product sitemap or a section index as the start page. On a site built with JavaScript, see Sites built with JavaScript.
Your site took too long to look through. Try a start page closer to your items, such as a section index. Finding the pages has about 20 seconds, and nothing turned up in that time. Give the product sitemap itself, or a section index.
Only https:// addresses can be crawled… Use the https:// address of each start page.
Mostly Listing rows, few Item Your pages publish no product markup, or the page limit went on category pages. Set the Item URL pattern so item pages are queued first and read as items, then Force a full re-crawl instead.
Items arrive out of stock, or with no price The price is only text on the page. Add schema.org Product data, or read the price with Grab columns from site — What arrives on its own.
… pages share their catalogue address with another page that differs only by a link parameter (e.g. ?id=7 vs ?id=8)… Items are keyed by path, so those pages became one item. Turn on Use the page’s own SKU as the item id.
… pages shared their SKU with another page crawled in the same pass, so they kept a generated id instead… Several pages carry one SKU, such as colour variants. Nothing is lost; each page kept an id from its address.
This page asks for a login, so it is not public and was not added. Members-only pages. See Private and members-only sites.
Not requested: the site refused our crawler on 100 pages in a row… Allow our crawler, then Crawl now.
… scheduled attempts in a row could not reach your site … The schedule is waiting longer between tries. Fix the reason in brackets, then Crawl now.
These fields stopped extracting on most pages of the last pass: … The site changed. Update those rules in Field mapping.
The crawl stopped below your Page limit Your plan caps the pages per crawl, or the crawl reads in a real browser (200 pages).
A schedule choice is greyed out Your plan allows re-crawls only that often.
Crawled items are never recommended Out of stock (no price), or visits are not tracked — Tracking.
Crawl my site is not in the menu The crawl has been switched off for your account — support does this only when a crawl misbehaves. Write to support@personyze.com.

The panel assistant (Ask Personyze) can also report on a crawl: whether it stopped at its page limit, which sections of your site its queue holds, and how many stored titles repeat or look like error pages.

Get an AI plan for your site

Inspire me reads your website and suggests the personalization campaigns to run first, and who should see each one. Free.

Scan your site
Did this page answer your question?
Thank you — that goes to whoever maintains this page.