SEO.JSONLD.WebPage (SEO v0.3.0-rc.0)

View Source

A web page. Every web page is implicitly assumed to be declared to be of type WebPage, so the various properties about that webpage, such as breadcrumb may be used. We recommend explicit declaration if these properties are specified, but if they are found outside of an itemscope, they will be assumed to be about the page.

Helper for building a Schema.org WebPage JSON-LD structure.

Summary

Types

t()

A JSON-LD map ready to be nested or rendered. String-keyed, always includes "@type" set to "WebPage", plus any camelCased field keys the caller provided (see build/1). "@context" is added at render time by SEO.JSONLD.meta/1 on the top-level node only.

Functions

Build a WebPage JSON-LD map.

Types

attrs()

@type attrs() ::
  %{
    optional(:breadcrumb) => String.t() | SEO.JSONLD.BreadcrumbList.t() | map(),
    optional(:last_reviewed) => Date.t() | String.t(),
    optional(:main_content_of_page) => SEO.JSONLD.WebPageElement.t() | map(),
    optional(:primary_image_of_page) => SEO.JSONLD.ImageObject.t() | map(),
    optional(:related_link) => URI.t() | String.t(),
    optional(:reviewed_by) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:significant_link) => URI.t() | String.t(),
    optional(:significant_links) => URI.t() | String.t(),
    optional(:speakable) =>
      URI.t() | String.t() | SEO.JSONLD.SpeakableSpecification.t() | map(),
    optional(:specialty) =>
      :anesthesia
      | :cardiovascular
      | :community_health
      | :dentistry
      | :dermatologic
      | :dermatology
      | :diet_nutrition
      | :emergency
      | :endocrine
      | :gastroenterologic
      | :genetic
      | :geriatric
      | :gynecologic
      | :hematologic
      | :infectious
      | :laboratory_science
      | :midwifery
      | :musculoskeletal
      | :neurologic
      | :nursing
      | :obstetric
      | :oncologic
      | :optometric
      | :otolaryngologic
      | :pathology
      | :pediatric
      | :pharmacy_specialty
      | :physiotherapy
      | :plastic_surgery
      | :podiatric
      | :primary_care
      | :psychiatric
      | :public_health
      | :pulmonary
      | :radiography
      | :renal
      | :respiratory_therapy
      | :rheumatologic
      | :speech_pathology
      | :surgical
      | :toxicologic
      | :urologic,
    optional(:about) => SEO.JSONLD.Thing.t() | map(),
    optional(:abstract) => String.t(),
    optional(:access_mode) => String.t(),
    optional(:access_mode_sufficient) => SEO.JSONLD.ItemList.t() | map(),
    optional(:accessibility_api) => String.t(),
    optional(:accessibility_control) => String.t(),
    optional(:accessibility_feature) => String.t(),
    optional(:accessibility_hazard) => String.t(),
    optional(:accessibility_summary) => String.t(),
    optional(:accountable_person) => SEO.JSONLD.Person.t() | map(),
    optional(:acquire_license_page) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:aggregate_rating) => SEO.JSONLD.AggregateRating.t() | map(),
    optional(:alternative_headline) => String.t(),
    optional(:archived_at) => t() | map() | URI.t() | String.t(),
    optional(:assesses) => String.t() | SEO.JSONLD.DefinedTerm.t() | map(),
    optional(:associated_media) => SEO.JSONLD.MediaObject.t() | map(),
    optional(:audience) => SEO.JSONLD.Audience.t() | map(),
    optional(:audio) =>
      SEO.JSONLD.Clip.t()
      | map()
      | SEO.JSONLD.MusicRecording.t()
      | SEO.JSONLD.AudioObject.t(),
    optional(:author) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:award) => String.t(),
    optional(:awards) => String.t(),
    optional(:character) => SEO.JSONLD.Person.t() | map(),
    optional(:citation) => SEO.JSONLD.CreativeWork.t() | map() | String.t(),
    optional(:comment) => SEO.JSONLD.Comment.t() | map(),
    optional(:comment_count) => integer(),
    optional(:conditions_of_access) => String.t(),
    optional(:content_location) => SEO.JSONLD.Place.t() | map(),
    optional(:content_rating) => String.t() | SEO.JSONLD.Rating.t() | map(),
    optional(:content_reference_time) =>
      DateTime.t() | NaiveDateTime.t() | String.t(),
    optional(:contributor) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:copyright_holder) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:copyright_notice) => String.t(),
    optional(:copyright_year) => number(),
    optional(:correction) =>
      SEO.JSONLD.CorrectionComment.t() | map() | String.t() | URI.t(),
    optional(:country_of_origin) => SEO.JSONLD.Country.t() | map(),
    optional(:creative_work_status) =>
      SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
    optional(:creator) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:credit_text) => String.t(),
    optional(:date_created) =>
      DateTime.t() | NaiveDateTime.t() | String.t() | Date.t(),
    optional(:date_modified) =>
      DateTime.t() | NaiveDateTime.t() | String.t() | Date.t(),
    optional(:date_published) =>
      Date.t() | String.t() | DateTime.t() | NaiveDateTime.t(),
    optional(:digital_source_type) =>
      :algorithmic_media_digital_source
      | :algorithmically_enhanced_digital_source
      | :composite_capture_digital_source
      | :composite_digital_source
      | :composite_synthetic_digital_source
      | :composite_with_trained_algorithmic_media_digital_source
      | :data_driven_media_digital_source
      | :digital_art_digital_source
      | :digital_capture_digital_source
      | :minor_human_edits_digital_source
      | :multi_frame_computational_capture_digital_source
      | :negative_film_digital_source
      | :positive_film_digital_source
      | :print_digital_source
      | :screen_capture_digital_source
      | :trained_algorithmic_media_digital_source
      | :virtual_recording_digital_source,
    optional(:discussion_url) => URI.t() | String.t(),
    optional(:display_location) => SEO.JSONLD.Place.t() | map(),
    optional(:edit_eidr) => String.t() | URI.t(),
    optional(:editor) => SEO.JSONLD.Person.t() | map(),
    optional(:educational_alignment) => SEO.JSONLD.AlignmentObject.t() | map(),
    optional(:educational_level) =>
      String.t() | URI.t() | SEO.JSONLD.DefinedTerm.t() | map(),
    optional(:educational_use) =>
      SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
    optional(:encoding) => SEO.JSONLD.MediaObject.t() | map(),
    optional(:encoding_format) => String.t() | URI.t(),
    optional(:encodings) => SEO.JSONLD.MediaObject.t() | map(),
    optional(:example_of_work) => SEO.JSONLD.CreativeWork.t() | map(),
    optional(:expires) =>
      Date.t() | String.t() | DateTime.t() | NaiveDateTime.t(),
    optional(:file_format) => String.t() | URI.t(),
    optional(:funder) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:funding) => SEO.JSONLD.Grant.t() | map(),
    optional(:genre) =>
      String.t() | URI.t() | SEO.JSONLD.DefinedTerm.t() | map(),
    optional(:has_part) => SEO.JSONLD.CreativeWork.t() | map(),
    optional(:headline) => String.t(),
    optional(:in_language) => String.t() | SEO.JSONLD.Language.t() | map(),
    optional(:interaction_statistic) =>
      SEO.JSONLD.InteractionCounter.t() | map(),
    optional(:interactivity_type) => String.t(),
    optional(:interpreted_as_claim) => SEO.JSONLD.Claim.t() | map(),
    optional(:is_accessible_for_free) => boolean(),
    optional(:is_based_on) =>
      SEO.JSONLD.CreativeWork.t()
      | map()
      | SEO.JSONLD.Product.t()
      | URI.t()
      | String.t(),
    optional(:is_based_on_url) =>
      SEO.JSONLD.CreativeWork.t()
      | map()
      | SEO.JSONLD.Product.t()
      | URI.t()
      | String.t(),
    optional(:is_family_friendly) => boolean(),
    optional(:is_part_of) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:keywords) =>
      SEO.JSONLD.DefinedTerm.t() | map() | String.t() | URI.t(),
    optional(:learning_resource_type) =>
      String.t() | SEO.JSONLD.DefinedTerm.t() | map(),
    optional(:license) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:location_created) => SEO.JSONLD.Place.t() | map(),
    optional(:main_entity) => SEO.JSONLD.Thing.t() | map(),
    optional(:maintainer) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:material) =>
      String.t() | SEO.JSONLD.Product.t() | map() | URI.t(),
    optional(:material_extent) =>
      SEO.JSONLD.QuantitativeValue.t() | map() | String.t(),
    optional(:mentions) => SEO.JSONLD.Thing.t() | map(),
    optional(:offers) => SEO.JSONLD.Offer.t() | map() | SEO.JSONLD.Demand.t(),
    optional(:pattern) => SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
    optional(:position) => String.t() | integer(),
    optional(:producer) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:provider) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:publication) => SEO.JSONLD.PublicationEvent.t() | map(),
    optional(:publisher) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:publisher_imprint) => SEO.JSONLD.Organization.t() | map(),
    optional(:publishing_principles) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:recorded_at) => SEO.JSONLD.Event.t() | map(),
    optional(:released_event) => SEO.JSONLD.PublicationEvent.t() | map(),
    optional(:review) => SEO.JSONLD.Review.t() | map(),
    optional(:reviews) => SEO.JSONLD.Review.t() | map(),
    optional(:schema_version) => String.t() | URI.t(),
    optional(:sd_date_published) => Date.t() | String.t(),
    optional(:sd_license) =>
      URI.t() | String.t() | SEO.JSONLD.CreativeWork.t() | map(),
    optional(:sd_publisher) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:size) =>
      SEO.JSONLD.DefinedTerm.t()
      | map()
      | SEO.JSONLD.QuantitativeValue.t()
      | String.t(),
    optional(:source_organization) => SEO.JSONLD.Organization.t() | map(),
    optional(:spatial) => SEO.JSONLD.Place.t() | map(),
    optional(:spatial_coverage) => SEO.JSONLD.Place.t() | map(),
    optional(:sponsor) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:teaches) => SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
    optional(:temporal) => String.t() | DateTime.t() | NaiveDateTime.t(),
    optional(:temporal_coverage) =>
      String.t() | URI.t() | DateTime.t() | NaiveDateTime.t(),
    optional(:text) => String.t(),
    optional(:thumbnail) => SEO.JSONLD.ImageObject.t() | map(),
    optional(:thumbnail_url) => URI.t() | String.t(),
    optional(:time_required) => Duration.t() | String.t(),
    optional(:translation_of_work) => SEO.JSONLD.CreativeWork.t() | map(),
    optional(:translator) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:typical_age_range) => String.t(),
    optional(:usage_info) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:version) => String.t() | number(),
    optional(:video) =>
      SEO.JSONLD.VideoObject.t() | map() | SEO.JSONLD.Clip.t(),
    optional(:word_count) => integer(),
    optional(:work_example) => SEO.JSONLD.CreativeWork.t() | map(),
    optional(:work_translation) => SEO.JSONLD.CreativeWork.t() | map(),
    optional(:additional_type) => String.t() | URI.t(),
    optional(:alternate_name) => String.t(),
    optional(:description) => SEO.JSONLD.TextObject.t() | map() | String.t(),
    optional(:disambiguating_description) => String.t(),
    optional(:identifier) =>
      String.t() | URI.t() | SEO.JSONLD.PropertyValue.t() | map(),
    optional(:image) =>
      URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(),
    optional(:main_entity_of_page) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:name) => String.t(),
    optional(:owner) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:potential_action) => SEO.JSONLD.Action.t() | map(),
    optional(:same_as) => URI.t() | String.t(),
    optional(:subject_of) =>
      SEO.JSONLD.Event.t() | map() | SEO.JSONLD.CreativeWork.t(),
    optional(:url) => URI.t() | String.t()
  }
  | [
      breadcrumb: String.t() | SEO.JSONLD.BreadcrumbList.t() | map(),
      last_reviewed: Date.t() | String.t(),
      main_content_of_page: SEO.JSONLD.WebPageElement.t() | map(),
      primary_image_of_page: SEO.JSONLD.ImageObject.t() | map(),
      related_link: URI.t() | String.t(),
      reviewed_by: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      significant_link: URI.t() | String.t(),
      significant_links: URI.t() | String.t(),
      speakable:
        URI.t() | String.t() | SEO.JSONLD.SpeakableSpecification.t() | map(),
      specialty:
        :anesthesia
        | :cardiovascular
        | :community_health
        | :dentistry
        | :dermatologic
        | :dermatology
        | :diet_nutrition
        | :emergency
        | :endocrine
        | :gastroenterologic
        | :genetic
        | :geriatric
        | :gynecologic
        | :hematologic
        | :infectious
        | :laboratory_science
        | :midwifery
        | :musculoskeletal
        | :neurologic
        | :nursing
        | :obstetric
        | :oncologic
        | :optometric
        | :otolaryngologic
        | :pathology
        | :pediatric
        | :pharmacy_specialty
        | :physiotherapy
        | :plastic_surgery
        | :podiatric
        | :primary_care
        | :psychiatric
        | :public_health
        | :pulmonary
        | :radiography
        | :renal
        | :respiratory_therapy
        | :rheumatologic
        | :speech_pathology
        | :surgical
        | :toxicologic
        | :urologic,
      about: SEO.JSONLD.Thing.t() | map(),
      abstract: String.t(),
      access_mode: String.t(),
      access_mode_sufficient: SEO.JSONLD.ItemList.t() | map(),
      accessibility_api: String.t(),
      accessibility_control: String.t(),
      accessibility_feature: String.t(),
      accessibility_hazard: String.t(),
      accessibility_summary: String.t(),
      accountable_person: SEO.JSONLD.Person.t() | map(),
      acquire_license_page:
        SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      aggregate_rating: SEO.JSONLD.AggregateRating.t() | map(),
      alternative_headline: String.t(),
      archived_at: t() | map() | URI.t() | String.t(),
      assesses: String.t() | SEO.JSONLD.DefinedTerm.t() | map(),
      associated_media: SEO.JSONLD.MediaObject.t() | map(),
      audience: SEO.JSONLD.Audience.t() | map(),
      audio:
        SEO.JSONLD.Clip.t()
        | map()
        | SEO.JSONLD.MusicRecording.t()
        | SEO.JSONLD.AudioObject.t(),
      author: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      award: String.t(),
      awards: String.t(),
      character: SEO.JSONLD.Person.t() | map(),
      citation: SEO.JSONLD.CreativeWork.t() | map() | String.t(),
      comment: SEO.JSONLD.Comment.t() | map(),
      comment_count: integer(),
      conditions_of_access: String.t(),
      content_location: SEO.JSONLD.Place.t() | map(),
      content_rating: String.t() | SEO.JSONLD.Rating.t() | map(),
      content_reference_time: DateTime.t() | NaiveDateTime.t() | String.t(),
      contributor: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      copyright_holder:
        SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      copyright_notice: String.t(),
      copyright_year: number(),
      correction:
        SEO.JSONLD.CorrectionComment.t() | map() | String.t() | URI.t(),
      country_of_origin: SEO.JSONLD.Country.t() | map(),
      creative_work_status: SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
      creator: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      credit_text: String.t(),
      date_created: DateTime.t() | NaiveDateTime.t() | String.t() | Date.t(),
      date_modified: DateTime.t() | NaiveDateTime.t() | String.t() | Date.t(),
      date_published: Date.t() | String.t() | DateTime.t() | NaiveDateTime.t(),
      digital_source_type:
        :algorithmic_media_digital_source
        | :algorithmically_enhanced_digital_source
        | :composite_capture_digital_source
        | :composite_digital_source
        | :composite_synthetic_digital_source
        | :composite_with_trained_algorithmic_media_digital_source
        | :data_driven_media_digital_source
        | :digital_art_digital_source
        | :digital_capture_digital_source
        | :minor_human_edits_digital_source
        | :multi_frame_computational_capture_digital_source
        | :negative_film_digital_source
        | :positive_film_digital_source
        | :print_digital_source
        | :screen_capture_digital_source
        | :trained_algorithmic_media_digital_source
        | :virtual_recording_digital_source,
      discussion_url: URI.t() | String.t(),
      display_location: SEO.JSONLD.Place.t() | map(),
      edit_eidr: String.t() | URI.t(),
      editor: SEO.JSONLD.Person.t() | map(),
      educational_alignment: SEO.JSONLD.AlignmentObject.t() | map(),
      educational_level:
        String.t() | URI.t() | SEO.JSONLD.DefinedTerm.t() | map(),
      educational_use: SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
      encoding: SEO.JSONLD.MediaObject.t() | map(),
      encoding_format: String.t() | URI.t(),
      encodings: SEO.JSONLD.MediaObject.t() | map(),
      example_of_work: SEO.JSONLD.CreativeWork.t() | map(),
      expires: Date.t() | String.t() | DateTime.t() | NaiveDateTime.t(),
      file_format: String.t() | URI.t(),
      funder: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      funding: SEO.JSONLD.Grant.t() | map(),
      genre: String.t() | URI.t() | SEO.JSONLD.DefinedTerm.t() | map(),
      has_part: SEO.JSONLD.CreativeWork.t() | map(),
      headline: String.t(),
      in_language: String.t() | SEO.JSONLD.Language.t() | map(),
      interaction_statistic: SEO.JSONLD.InteractionCounter.t() | map(),
      interactivity_type: String.t(),
      interpreted_as_claim: SEO.JSONLD.Claim.t() | map(),
      is_accessible_for_free: boolean(),
      is_based_on:
        SEO.JSONLD.CreativeWork.t()
        | map()
        | SEO.JSONLD.Product.t()
        | URI.t()
        | String.t(),
      is_based_on_url:
        SEO.JSONLD.CreativeWork.t()
        | map()
        | SEO.JSONLD.Product.t()
        | URI.t()
        | String.t(),
      is_family_friendly: boolean(),
      is_part_of: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      keywords: SEO.JSONLD.DefinedTerm.t() | map() | String.t() | URI.t(),
      learning_resource_type: String.t() | SEO.JSONLD.DefinedTerm.t() | map(),
      license: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      location_created: SEO.JSONLD.Place.t() | map(),
      main_entity: SEO.JSONLD.Thing.t() | map(),
      maintainer: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      material: String.t() | SEO.JSONLD.Product.t() | map() | URI.t(),
      material_extent: SEO.JSONLD.QuantitativeValue.t() | map() | String.t(),
      mentions: SEO.JSONLD.Thing.t() | map(),
      offers: SEO.JSONLD.Offer.t() | map() | SEO.JSONLD.Demand.t(),
      pattern: SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
      position: String.t() | integer(),
      producer: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      provider: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      publication: SEO.JSONLD.PublicationEvent.t() | map(),
      publisher: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      publisher_imprint: SEO.JSONLD.Organization.t() | map(),
      publishing_principles:
        SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      recorded_at: SEO.JSONLD.Event.t() | map(),
      released_event: SEO.JSONLD.PublicationEvent.t() | map(),
      review: SEO.JSONLD.Review.t() | map(),
      reviews: SEO.JSONLD.Review.t() | map(),
      schema_version: String.t() | URI.t(),
      sd_date_published: Date.t() | String.t(),
      sd_license: URI.t() | String.t() | SEO.JSONLD.CreativeWork.t() | map(),
      sd_publisher: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      size:
        SEO.JSONLD.DefinedTerm.t()
        | map()
        | SEO.JSONLD.QuantitativeValue.t()
        | String.t(),
      source_organization: SEO.JSONLD.Organization.t() | map(),
      spatial: SEO.JSONLD.Place.t() | map(),
      spatial_coverage: SEO.JSONLD.Place.t() | map(),
      sponsor: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      teaches: SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
      temporal: String.t() | DateTime.t() | NaiveDateTime.t(),
      temporal_coverage:
        String.t() | URI.t() | DateTime.t() | NaiveDateTime.t(),
      text: String.t(),
      thumbnail: SEO.JSONLD.ImageObject.t() | map(),
      thumbnail_url: URI.t() | String.t(),
      time_required: Duration.t() | String.t(),
      translation_of_work: SEO.JSONLD.CreativeWork.t() | map(),
      translator: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      typical_age_range: String.t(),
      usage_info: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      version: String.t() | number(),
      video: SEO.JSONLD.VideoObject.t() | map() | SEO.JSONLD.Clip.t(),
      word_count: integer(),
      work_example: SEO.JSONLD.CreativeWork.t() | map(),
      work_translation: SEO.JSONLD.CreativeWork.t() | map(),
      additional_type: String.t() | URI.t(),
      alternate_name: String.t(),
      description: SEO.JSONLD.TextObject.t() | map() | String.t(),
      disambiguating_description: String.t(),
      identifier: String.t() | URI.t() | SEO.JSONLD.PropertyValue.t() | map(),
      image: URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(),
      main_entity_of_page:
        SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      name: String.t(),
      owner: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      potential_action: SEO.JSONLD.Action.t() | map(),
      same_as: URI.t() | String.t(),
      subject_of: SEO.JSONLD.Event.t() | map() | SEO.JSONLD.CreativeWork.t(),
      url: URI.t() | String.t()
    ]

t()

@type t() :: %{required(String.t()) => term()}

A JSON-LD map ready to be nested or rendered. String-keyed, always includes "@type" set to "WebPage", plus any camelCased field keys the caller provided (see build/1). "@context" is added at render time by SEO.JSONLD.meta/1 on the top-level node only.

Functions

build(attrs)

@spec build(attrs()) :: t()

Build a WebPage JSON-LD map.

Fields

  • :breadcrumb - A set of links that can help a user understand and navigate a website hierarchy.
  • :last_reviewed - Date on which the content on this web page was last reviewed for accuracy and/or completeness.
  • :main_content_of_page - Indicates if this web page element is the main subject of the page.
  • :primary_image_of_page - Indicates the main image on the page.
  • :related_link - A link related to this web page, for example to other related web pages.
  • :reviewed_by - People or organizations that have reviewed the content on this web page for accuracy and/or completeness.
  • :significant_link - One of the more significant URLs on the page. Typically, these are the non-navigation links that are clicked on the most.
  • :significant_links - The most significant URLs on the page. Typically, these are the non-navigation links that are clicked on the most.
  • :speakable - Indicates sections of a Web page that are particularly 'speakable' in the sense of being highlighted as being especially appropriate for text-to-speech conversion. Other sections of a page may also be usefully spoken in particular circumstances; the 'speakable' property serves to indicate the parts most likely to be generally useful for speech.

The speakable property can be repeated an arbitrary number of times, with three kinds of possible 'content-locator' values:

1.) id-value URL references - uses id-value of an element in the page being annotated. The simplest use of speakable has (potentially relative) URL values, referencing identified sections of the document concerned.

2.) CSS Selectors - addresses content in the annotated page, e.g. via class attribute. Use the cssSelector property.

3.) XPaths - addresses content via XPaths (assuming an XML view of the content). Use the xpath property.

For more sophisticated markup of speakable sections beyond simple ID references, either CSS selectors or XPath expressions to pick out document section(s) as speakable. For this we define a supporting type, SEO.JSONLD.SpeakableSpecification which is defined to be a possible value of the speakable property.

  • :specialty - One of the domain specialities to which this web page's content applies. One of: :anesthesia, :cardiovascular, :community_health, :dentistry, :dermatologic, :dermatology, :diet_nutrition, :emergency, :endocrine, :gastroenterologic, :genetic, :geriatric, :gynecologic, :hematologic, :infectious, :laboratory_science, :midwifery, :musculoskeletal, :neurologic, :nursing, :obstetric, :oncologic, :optometric, :otolaryngologic, :pathology, :pediatric, :pharmacy_specialty, :physiotherapy, :plastic_surgery, :podiatric, :primary_care, :psychiatric, :public_health, :pulmonary, :radiography, :renal, :respiratory_therapy, :rheumatologic, :speech_pathology, :surgical, :toxicologic, :urologic.

Inherited properties

Additional properties are available through the inheritance chain. See each ancestor's docs for its properties: