Website review
This review may include AI-generated content and is not individually verified. Domain, certificate and other facts come from the observed data on this page.
What is Heritrix 3?
Heritrix 3 is an open-source, extensible web crawler from the Internet Archive, documented at Heritrix 3 Documentation. You configure a crawl job, run the crawler, and it fetches and archives web content to a chosen fidelity — making it a tool for building web archives rather than a general-purpose scraper.
What it does
According to the documentation's contents, Heritrix 3 covers the full crawl lifecycle: getting started and installation, operating the crawler, configuring crawl jobs, a bean reference, a REST API, and a glossary. Practical capabilities visible in the docs include:
- Crawl scoping and rules — decide rules, decide-rule sequences, and crawl scope control what gets fetched.
- Politeness and limits — robots.txt honoring policy, retry policy, bandwidth limits, and crawl limits such as
maxToeThreads. - Frontier and queues — the frontier manages which URIs are pending, with politeness settings.
- Protocols — HTTP, HTTP/2, HTTP/3, FTP, SFTP, and WHOIS.
- Job control — checkpointing, restarting from a checkpoint, and crawl recovery (full or split recovery).
- Site-specific settings — "sheets" for per-site configuration, plus authentication and cookies via a credential store, HTTP basic/digest, HTML form auth, and cookie loading.
- Reporting and logs — crawl summary, seeds, hosts, mimetypes, response codes, processors, frontier summary, and thread reports, alongside logs like
crawl.logandprogress-statistics.log.
Who it suits
Heritrix 3 fits archivists, librarians, digital-preservation teams, and researchers who need reproducible, policy-driven crawls of defined scope. It is less suited to quick one-off scraping: the documentation describes a Java-based system with configuration files, beans, and an operator interface, so expect setup effort and a learning curve. The docs also note that more Heritrix documentation currently lives on the GitHub wiki, while structured guides are being migrated — so some topics may be split across two places.
A useful next step
If you are evaluating it, start with the "Getting Started with Heritrix" section: check system requirements, install, run it, open the user interface, and complete "Your First Crawl." Then look at "Configuring Crawl Jobs" and the decide rules to see whether its scoping and politeness controls match your collection policy. For comparison, the Internet Archive also maintains related crawling and archiving tools; if your goal is replay rather than crawling, see Internet Archive.
How do I install and run my first crawl with Heritrix?
Install Heritrix by meeting the Java runtime requirements, unpacking the distribution, and setting the environment variables the documentation lists. Then start the crawler, open the web user interface, and create a job with a seed list. The "Getting Started with Heritrix" section of Heritrix 3 Documentation covers exactly these steps: System Requirements, Installation, Environment Variables, Running Heritrix, Accessing the User Interface, Your First Crawl, and Exiting Heritrix.
A practical first run
- Check the system requirements and install a compatible Java runtime.
- Download and unpack the Heritrix distribution.
- Set the documented environment variables, including where Heritrix stores its jobs directory.
- Launch Heritrix from the command line (the docs also describe running it under Docker).
- Open the user interface in a browser and log in with the credentials you configured.
- Create a job, add your seed URLs, and start it.
- Watch the logs and reports, then stop the crawler when the crawl finishes.
Before you point it at the open web
The documentation's security section is worth reading first: network access control, login authentication, and access control matter because the interface can control a crawler that fetches external sites. For a first crawl, keep the scope narrow — one host or a small set of pages — and set crawl limits so a mistake in scope rules does not turn into a long, wide crawl.
Where to look when something goes wrong
Heritrix writes separate logs for different problems: alerts.log, crawl.log, progress-statistics.log, runtime-errors.log, and uri-errors.log. Reports such as crawl-report.txt, seeds-report.txt, hosts-report.txt, responsecode-report.txt, and threads-report.txt summarize what happened. If the crawl stops unexpectedly, the checkpointing and crawl recovery material explains how to restart from a checkpoint rather than from zero.
Next step
Once the first crawl completes, read Configuring Crawl Jobs: Basic Job Settings, Crawl Scope, Decide Rules, Frontier, Politeness, and Retry Policy. Those settings are what separate a toy crawl from a controlled one, and the docs also describe Sheets for site-specific settings and a scripting console for modifying a running job.
How can I configure crawl limits and scope to avoid overloading a target site?
Heritrix gives you two separate levers for not hammering a target: crawl scope (which URLs you follow at all) and crawl limits and politeness (how fast and how broadly you hit them). Both are set per job, so the practical answer is to tighten scope first, then cap concurrency and rate.
Scope: decide what is even eligible
Scope is controlled by decide rules, typically assembled in a DecideRuleSequence. In the job configuration you get a Crawl Scope section that includes Decide Rules and a DecideRuleSequence, plus Sheets for site-specific settings. The documentation's Bean Reference lists many individual rules, including AcceptDecideRule and a family of matchers such as ContentTypeMatchesRegexDecideRule, ContentTypeNotMatchesRegexDecideRule, ContentLengthDecideRule, and ClassKeyMatchesRegexDecideRule.
A scope approach that keeps load low:
- Restrict to the host(s) you actually need, rather than letting the frontier wander.
- Exclude large or expensive types (video, archives, big PDFs) with a content-type or content-length rule.
- Keep the seed list narrow; every extra seed multiplies the frontier.
- Use
robots.txthonoring policy as configured in the job, rather than assuming it is on.
Limits and politeness: cap the pressure
The Crawl Limits section includes maxToeThreads, and the job settings also cover Frontier Politeness, Retry Policy, and Bandwidth Limits. maxToeThreads is the direct concurrency cap — fewer ToeThreads means fewer simultaneous requests. Politeness settings control per-host delays and how many requests a host can receive in a window. Bandwidth limits cap bytes per second, which matters if your crawler is saturating a shared link.
A simple mental model:
| Concern | Setting area | Effect |
|---|---|---|
| Too many parallel requests | Crawl Limits / maxToeThreads |
Caps simultaneous fetches |
| Hitting one host too fast | Frontier Politeness | Adds per-host delay and queues |
| Crawler eats all bandwidth | Bandwidth Limits | Throttles throughput |
| Retrying failing hosts repeatedly | Retry Policy | Controls retry count and backoff |
| Crawling irrelevant URLs | Crawl Scope / Decide Rules | Shrinks what is fetched |
A concrete starting scenario
If you are archiving a single small site, set a low maxToeThreads, keep politeness conservative, restrict scope to that host, and exclude large binaries. Run a short job and check the reports — crawl-report.txt, hosts-report.txt, responsecode-report.txt, threads-report.txt, and frontier-summary-report.txt — to see actual request rates and any error spikes. hosts-report.txt is the quickest way to spot one host receiving disproportionate traffic.
Start with the Getting Started with Heritrix and Configuring Crawl Jobs sections in Heritrix 3 Documentation, then adjust based on the reports rather than guessing.
What is the best way to recover or restart a crawl from a checkpoint?
Use Heritrix’s built-in checkpoint and recovery workflow rather than trying to hand-restart a stopped crawl. The documentation treats checkpointing as a first-class operational feature, with both manual and automated options, and separates recovery into full and split modes.
How the pieces fit together
| Situation | Mechanism | What it does |
|---|---|---|
| You want a restart point before stopping | Checkpointing (Action Directory) | Writes crawl state so the job can be resumed |
| You want restarts without manual steps | Automated Checkpointing | Triggers checkpoints on a schedule or condition |
| You stopped cleanly | Restarting from a Checkpoint | Resumes from the saved state |
| The crawl or machine failed | Crawl Recovery | Rebuilds state; full recovery or split recovery depending on scope |
Practical sequence
- Confirm the job has a checkpoint directory configured and that a checkpoint actually exists.
- Stop the crawler in a way that lets it finish writing state, if you have the choice.
- Restart the job and select the checkpoint-based resume path rather than starting a fresh crawl.
- If the checkpoint is unusable or the failure was severe, use crawl recovery; choose full recovery when you need the whole frontier and state rebuilt, split recovery when you can recover in parts.
- Verify progress by checking the frontier summary and crawl reports before letting the job run unattended.
Decision criteria
- Clean shutdown, recent checkpoint: restart from checkpoint.
- Crash or corrupted state: recovery, and expect some re-crawling of recently fetched URIs.
- Long-running crawl with limited disk: enable automated checkpointing so you always have a recent restart point.
- Politeness and retry settings are reapplied from the job configuration, so review them after recovery if the crawl was throttled.
For exact command syntax, environment variables and bean settings, work from the official guides: Heritrix 3 Documentation.
How do I set up authentication and cookies for crawling protected content?
Authentication and cookies in Heritrix are configured through the Credential Store and the Authentication and Cookies section of a crawl job. The documentation covers HTTP Basic and Digest Authentication, HTML Form Authentication, and loading cookies, so you can handle both simple protected pages and login-form-based sites.
How the pieces fit together
- Credential Store — holds the login credentials Heritrix should use for matching hosts or realms.
- HTTP Basic/Digest — for servers that challenge requests directly with a
401response. - HTML Form Authentication — for sites that require filling in a username/password form and following the resulting session.
- Loading Cookies — for supplying pre-existing cookies (for example, a session token) rather than logging in programmatically.
Choosing an approach
| Situation | Configuration to use |
|---|---|
| Server returns HTTP auth challenge | Credential Store with Basic or Digest |
| Login page with form fields | HTML Form Authentication |
| Already have a valid session cookie | Load cookies into the job |
| Multiple hosts with different logins | Separate credential entries per host/realm |
A practical next step: start a small test crawl against one protected URL, then check crawl.log and uri-errors.log in the logs directory to confirm whether authentication succeeded or requests were rejected. If you see repeated 401 or 403 responses, revisit the credential entry or form field mapping before scaling up the job.
For the exact bean names and fields, see Heritrix 3 Documentation — the Bean Reference and "Authentication and Cookies" pages are the authoritative source.
When should I use the REST API or scripting console instead of the web UI?
Use the REST API or scripting console when you need to automate a crawl, change a running job, or inspect state that the web UI only exposes as a form or report. The web UI is the right tool for learning and for one-off jobs; the API and console are for repeatability and control.
REST API
- Start, pause, stop, or check a job from a script or CI pipeline.
- Integrate crawling with another system, such as triggering a crawl after a content release.
- Retrieve status and reports programmatically instead of reading pages manually.
Scripting console
- Inspect and modify a running job's beans: adjust limits, scope rules, or politeness settings without a restart.
- Explore the live object model when you are unsure which bean or setting controls a behavior.
- Apply a change once, observe the effect, then encode it in a job configuration if it works.
Web UI
- First crawls, guided setup, and visual review of reports.
- Occasional jobs where you want to see the forms and defaults.
A practical decision rule: if you will do it more than twice, or if another system must trigger it, script it; if you are still discovering what the setting does, use the UI or console first. For example, a digital-preservation team scheduling a monthly crawl of a partner site would drive the REST API from a scheduler, while an archivist tuning robots.txt honoring for a new site might experiment in the scripting console and then save the result into the job configuration.
The trade-off is that the API and console assume you already know the bean names and job structure; the web UI teaches those. Start with the Getting Started and Configuring Crawl Jobs sections to learn the model, then move to the REST API and Bean Reference when you need automation. The documentation also notes that more material still lives on the project's GitHub wiki, so check there for gaps: GitHub.
User reviews (0)