University of Lincoln — Terminalfour Search
Overview
Lincoln Search is powered by three distinct components:
- Terminalfour Search Crawler: Responsible for visiting pages and fetching content.
- Site Search Dashboard: Responsible for the user interface, ranking, and display logic.
- Terminalfour Search content type: Adds the Search Results page to the website.
User Interface & Implementation
Site Search is accessed via the magnifying glass icon in the website header. Clicking this reveals an overlay with a search input, which submits through to the search results page.
- Front-end code: located in the Terminalfour Search content type.
- Search UX library: SearchStax Studio JS v4.2.25, loaded from the SearchStax CDN.
- Live example: https://www.lincoln.ac.uk/search/
The results page is built from the following widgets, each with a custom template so the markup matches the University's design system:
| Widget | Container | Purpose |
|---|---|---|
| Search input | #searchstax-input-container |
Keyword input and auto-suggestions |
| Tabs | #searchstax-tabs-container |
Section-type tabs (All Results, Courses, Events, Staff) |
| Search feedback | #search-feedback-container |
"1 – 10 of 18 results for…" line |
| Sorting | #search-sorting-container |
Relevance / Most Recent |
| Facets | #searchstax-facets-container |
Sidebar filters |
| Results | #searchstax-results-container |
Result cards |
| Pagination | #searchstax-pagination-container |
Previous / Next |
| External promotions | #searchstax-external-promotions-layout-container |
Promoted external links |
Data Collection (The Crawler)
The Terminalfour Search Crawler visits the website on a schedule to fetch metadata and page content.
- Crawl frequency: daily
- Configurations: URL settings, exclusions, and metadata mappings are held in the crawler configuration.
- Indexing logic: the crawler must be able to find a page in order to index it. A page hidden from navigation with no inbound links will not be discovered.
- Robots.txt: the file generated by the Robots File content type must allow the crawler. For example:
User-agent: terminalfour-nutch-spider
Allow: /
Crawl-delay: 0.5
Metadata
The crawler picks up metadata from page templates. Field assignment is defined per Page Type
Automatic data mapping
The crawler collects and pushes the following fields to Site Search automatically. These appear in the Site Search Dashboard without any configuration.
| Field | Description |
|---|---|
host |
Host name of the URL |
url |
The full page URL |
id |
The unique identifier (URL) |
content |
Content extracted from the body of the page |
tstamp |
Timestamp of when the URL was last fetched |
urlDepth |
How many clicks deep the page is from the root |
url_keywords |
Keywords extracted from the URL string |
Custom indexed fields
The results templates read the following mapped fields. Any change to these field names in the Dashboard requires a matching change in the content type's result templates.
Shared
| Field | Used for |
|---|---|
sectionType_s |
Drives tab selection and which result card is rendered |
dctitle_txt_en |
Fallback title when the crawler title is empty |
searchtitle_txt_en |
Search-specific title override |
description_txt_en |
Result summary |
content |
Result summary fallback, trimmed to 200 characters |
category_s |
Category tag |
imageAlt_t |
Alt text for the result thumbnail |
Courses
| Field | Used for |
|---|---|
CourseLevel1_s |
Level label shown above the course title |
CourseType_s |
Course type |
ucasPoints_t |
"UCAS tariff points" row |
CourseALevel_t |
"A-level entry" row |
Events
| Field | Used for |
|---|---|
EventStartDay_t, EventEndDay_t |
Day portion of the displayed date range |
EventStartMonth_t |
Month, abbreviated for display (e.g. August → Aug) |
EventStartYear_t, EventEndYear_t |
Year portion |
EventStartTime_t |
Time shown beside the clock icon |
EventLocation_s |
Location shown beside the pin icon |
EventCategory_s |
Category tag on the event card |
Staff
| Field | Used for |
|---|---|
StaffTitle_t, StaffName_t |
Card heading |
StaffURL_s |
Link target for the staff profile |
StaffDepartment_txt_en |
Department |
StaffDivison_txt_en |
Division (note: the field name is misspelled at source) |
StaffEmail_s |
Contact email, rendered as a mailto: link |
Event dates are assembled into a single display string at render time, so 1 Aug 2026 and 10 – 13 Aug 2026 are both produced from the same set of fields. Leading zeroes are stripped.
Content Exclusion & Visibility
There are several ways to prevent a page from being indexed or from appearing in search results, depending on your access level.
| Method | Effect | Access level |
|---|---|---|
| 'Remove from crawl' element | Ticking this on a section's General tab adds a robots noindex meta tag. The page is not indexed, but links on the page are still followed. |
Moderator |
| 'Hide from search' element | Ticking this on a section's General tab adds a sectionDisplay false meta tag. The page is crawled but hidden from the search results interface. |
Moderator |
| Metadata tab 'Robots' element | Set a custom robots meta tag, e.g. noindex, nofollow, to prevent indexing and stop the crawler following links. |
Moderator |
| Robots.txt disallow rules | Add disallow rules via the Robots File content type to keep the crawler out of whole areas, e.g. Disallow: /component-library/*. |
Administrator |
| URL filter regex | Add exclusion rules directly in the crawler settings. | Crawler access |
Search Management & Customisation
Search behaviour is managed in the Site Search Dashboard.
- Searchable fields: define which fields are indexed for searching and which are returned for display in the results list.
- Ranking: adjust weighted ranking criteria, e.g. to give more weight to specific metadata fields.
- Search rules:
- Promotions: pin specific internal or external pages to the top of results for certain keywords.
- Synonyms: group related terms (e.g. "Student" and "Learner") so they return the same results.
- Stop words: define common words to be ignored to improve accuracy.
- Facets (filters): manage the sidebar filters that let users narrow results.
Search Profiles
A search profile organises search configuration, analytics, and result behaviour. Multiple profiles can exist to support different areas or languages.
| Profile | Where it is set | Notes |
|---|---|---|
redesign |
Sent on every query by the front end | The relevance profile queries run against |
Main Profile |
Search feedback widget | Profile the feedback widget reports into |
Layouts
Layouts define which fields and metadata are indexed and made available for searching, filtering, and display. The following section types are in use, determined by the sectionType_s field:
- Webpage — standard University website pages
- Courses — course and programme pages
- Events — event listings and event detail pages
- Staff — staff profiles
News and Webpage are indexed but their tabs are hidden in the interface; their results still appear under All Results.
Filters (Facets)
Filters allow users to refine results based on indexed metadata. Users can apply more than one filter at a time, and results update as each is applied.
| Filter | Notes |
|---|---|
| Study level | Courses tab |
| Degree type | Courses tab |
| Study mode | Courses tab |
| Department | Staff tab |
| Division | Staff tab |
| Locations | Events tab |
| Category | Events tab |
| Section Type | Hidden in the interface — surfaced as the tabs instead |
Applied filters appear as removable pills in the bar above the results, alongside a Clear filters control that removes all of them in one action.
Visual Templates
Visual templates control how individual results are displayed.
| Template | Applies to | Contents |
|---|---|---|
| All Results row | Every result on the All Results tab | Type tag, title, summary |
| Course card | Courses tab | Level, title, UCAS tariff points, A-level entry, summary |
| Event card | Events tab | Thumbnail, date, title, time, location, category tag |
| Staff card | Staff tab | Name and title, department, division, email link |
| No results | Any tab | "No matching results" message plus a spelling suggestion where one is available |
Result titles are cleaned at render time: the " - University of Lincoln" suffix is removed, and anything after a pipe character is dropped. Summaries are trimmed to 200 characters at the nearest word boundary and suffixed with an ellipsis.
Sorting and Ranking
Ranking is configured per relevance profile in the Dashboard and can prioritise specific content types, fields, or promoted results.
Users can re-sort results using the Sort by control:
- Relevance (default)
- A-Z by search title
- Z-A by search title
How to Promote Specific Results
Promoted Results allow specific content to appear prominently within search results, and can be used to highlight key content, campaigns, or external resources.
- Internal promotions pin an indexed page to the top of results for chosen keywords.
- External promotions render as a promo panel above the results list, with a heading, description, and call-to-action link. These are used for destinations outside the indexed site.
Promotions are configured against keywords in the Dashboard under Search Rules.
Search Box
The search box links directly to Site Search from:
- The main site navigation
- The global page layout
- The 404 error page
This ensures users can always reach search, even when content cannot be found.
Searching
Performing a search
Users enter a term in the search box in the main navigation and are directed to the search results page. Results are returned against the configured relevance profile.
Understanding search results
- Results are displayed using different visual templates depending on content type.
- The result count and search term are shown above the results.
- Promoted results may appear at the top of the list.
Refining results
- The tabs narrow results to a single section type.
- Sidebar filters narrow results further within a tab.
- Applied filters are listed as pills above the results and can be removed individually or all at once.
Auto-suggestions
As users type, suggestions appear beneath the search input, drawn from the suggester collection. Suggestions are keyboard-navigable and help users discover commonly searched terms.
Pagination
Results are returned 10 per page with Previous / Next controls. Changing page scrolls the user back to the top of the results.
Front-end Customisations
The following behaviours are implemented in the content type rather than configured in the Dashboard. They are worth knowing about before making changes to the templates.
All Results tab. This tab is not returned by the search index — it is added to the tab list by the front end, and its count is the unfiltered total for the current query. Its active state is driven by the absence of a sectionType_s parameter in the URL rather than by the widget.
Applied filters row. The pills above the results are rendered by the content type from the state of the facet checkboxes, not from the widget's own pill markup, so that they can sit in the refine bar rather than in the sidebar. Removing a pill re-triggers the corresponding checkbox, so the widget remains the source of truth.
Mobile layout. Below 992px the facet panel moves from the sidebar to sit directly beneath a Filter button in the refine bar, and is collapsed by default. The button is hidden on the All Results view, where there are no filters to apply.
Facet accordion. Facet group panels are expanded and collapsed by custom code rather than by Bootstrap's collapse plugin, and their open/closed state is preserved across result re-renders.
Disabled features. The following SearchStax widgets are available but are not currently enabled: Smart Answers (AI-generated answers), Related Searches, Location Search, and the Search Feedback rating panel.