Skip to content

Content on sites

Decide which content belongs to sites, how sites keep it apart, and which related modules to turn on.

Needs Sites content

Part of Sites content.

Membership and the origin site are explained on Concepts.

Which content belongs to sites

The site type's Assignable content rows decide it per content type: content types, media types, block types, vocabularies and users, plus what other modules add.

Value Effect
Unlimited sites An item can belong to any number of sites. The default.
Single site An item belongs to one site. The default for taxonomy terms.
Global (no site) Sites of the type do not take this content.

On Valtora's site types, articles and basic pages take Unlimited sites, so the group's press release can belong to Valtora, Hydrion and Torqline; tags take Single site, so each tag belongs to one site.

A type that leaves the rows Value per site lets each site change them on its own Assignable content section. See Site types.

Every item of a type a site takes belongs to a site from the moment it is created: the forms ask for one, the create check refuses accounts that may add to no site, and an API client names the site. A type that no site takes is global content: created on the hub, it belongs to no site and shows on every site. A global tag vocabulary or a shared media library is such a type. Keep global and site-bound content in separate types; a type cannot hold both.

Content that lost its site, say through an import that brought no memberships, is not global content: it shows on no site, only View unassigned content or Administer sites in a platform role sees it at all, and it waits on the Unassigned content report.

Auto-assigned content

A site's Auto-assigned content setting lists Default content types. New content of these types, created on the hub, starts with every such site preselected. With Origin site by weight, the lowest-weight site that has this box checked is also preselected as the origin site; the weight is the order on /admin/sites/table. Editors can change the preselection before saving. Set both on the site type to give every new site the same defaults.

Isolation

On a site's hostname, the page of another site's content answers 404 "Not Found", to every user. Hydrion's article "Service intervals for X-series pumps", for instance, answers 404 on www.torqline.example. Inside a page, a reference to another site's content or a content block of another site does not render: its access check hides it. Views and reference field options are scoped by site filtering.

Enforce per-entity cross-site view access on Sites configuration > General (/admin/sites/configuration/general) switches that access check off for the whole platform; the 404 for pages stays. Turn it off only when site filtering keeps the sites apart.

JSON:API and core REST follow the same rules. On a site's hostname, another site's item answers 404, collections list the site's content only, and an item created there belongs to that site. On the hub a client names the site with the site_id query parameter, as the links of the administration do: POST /jsonapi/node/article?site_id=hydrion creates an article on Hydrion. Without a site the account may add to, the request fails with 422 "Unprocessable Content". Global content needs no site.

Files and media

Media types are assignable content like any other.

Needs Sites file

Part of Sites file.

With drush en sites_file, a file belongs to the sites of the content that uses it. A private file (private://) of other sites is refused on a site's hostname, and a form cannot attach it. Public files are served by the web server without this check, so keep site files private where that matters. See Media and files.

sites_file.settings has no form; set it with Drush or in settings.php:

Key Default Effect
enforce_download_access true Both refusals above. false leaves file access to Drupal core.
upload_directory_prefix empty A directory, tokens allowed, that uploads on a site's hostname go into, like sites/[current-site:id].
drush config:set sites_file.settings upload_directory_prefix 'sites/[current-site:id]'

Needs Sites menu

Part of Sites menu.

Installing Sites content also installs Sites menu. The Per-site menus rows of the site type list the menus; a checked menu gets its own links on each site, and the menu itself stays shared. A menu left unchecked shows the same links on every site. The Administration, Tools, User account menu and Sites menus are always shared. See Menus.

Needs Sites taxonomy

Part of Sites taxonomy.

Installing Sites content while Taxonomy is on also installs Sites taxonomy. Terms of a vocabulary the type makes assignable belong to sites, and each site's Taxonomy section lists its vocabularies and its own terms. Vocabularies stay shared and are managed on the hub; a vocabulary a site takes with Unlimited sites has its one list of terms there too. See Taxonomy terms.

Needs Sites Linkit

Part of Sites Linkit.

On a Linkit profile's Manage matchers tab (/admin/config/content/linkit):

  • A content matcher's Filter by site context, on by default, suggests content by site (References and links); off, every site's content.
  • The Site front page matcher, once added, links a site's front page by its current hostname.

The Linkit (with attributes) widget of Link attributes works too.

Webforms

Needs Sites Webform

Part of Sites Webform.

After drush en sites_webform, every existing webform is usable on no site until it is assigned on its Sites tab (Webforms). Sites status counts them and links their list (/admin/structure/webform?scope=none). The assignment is part of the webform's configuration and is exported with it.

On a site's hostname, a webform of other sites or of none answers 404 on its visitor pages (the form, its confirmation, its submissions), and a webform field or webform block renders nothing in its place, whatever Enforce per-entity cross-site view access says. The hub serves every webform, and the webform's administration pages keep the webform's own access on every hostname.

Last updated 2026-11-02