Write answers and connect them to sources
Put the subject, conditions, exceptions, and timing needed for an answer in the body and connect them to sources. Distinguish the author, publisher, and document subject, and preserve dates and evidence through republication and redesign.
Improve the answer, conditions, and evidence together
Answer the question in the first paragraph, then explain who it applies to, conditions, steps, exceptions, the reference date, and evidence. Opening-hours information should include hours, holidays, and the effective date together.
Before revision, the fictional library says: “A space everyone can use conveniently.” After revision: “Open Sundays from 10 a.m. to 5 p.m. Closed on the first Sunday of each month and public holidays. This timetable applies from October 2026.” Place the source link for these hours immediately after the passage. Fill missing conditions for fees, eligibility, and application methods in the same way.
Store publication date, substantive modification date, event date, and effective date separately in manuscript data. Reusing one date field for everything can make an old fact look like a new event. For changed guidance, state what changed and when, and link the old notice to the latest guidance. Use verifiable names for authors, organizations, and source documents.
Explain information needed for the same decision on one page. Use the actual topic in titles and headings, tables for comparing conditions, and ordered steps for procedures. Use FAQs when readers have real questions. Each answer should include its audience, conditions, exceptions, and evidence. After deployment, observe whether it is used for actual questions.
“Everyone can use it conveniently” contains no fact that helps someone decide whether to visit on Sunday. The revised passage gives hours, exceptions, and an effective date that readers can compare with their visit date. Search and answer tools reading it receive the same conditions. Keeping exceptions beside even a short answer reduces changes in meaning when only part of a passage is extracted.
Write answers and evidence for the type of question
The order of explanation depends on the question. Definitions explain meaning and distinctions; how-to questions cover steps and failures; comparisons use common criteria; conditional questions explain eligibility and exceptions; time-related questions give the applicable period. The table shows revisions to library guidance for these five types.
Make source material, experience, and authorship verifiable
An entity is an identifiable person, organization, place, document, or similar subject. Libraries with the same name can be distinguished by location, official address, and operator. Use author for the writer, publisher for the issuing organization, about for the subject, sameAs for links identifying the same entity, and citation for evidence supporting a claim, according to the actual relationships.
E-E-A-T stands for Experience, Expertise, Authoritativeness, and Trustworthiness. Google does not describe it as a single direct ranking factor. State the scope of experience, evidence for claims, and authorship, and link material readers can verify. Content-quality guidance
When describing experience, include what was done and the conditions at the time. For image-compression results, for example, give source and converted file sizes and display times measured on the same device. Readers can assess file-size reduction and screen-speed improvement separately. When citing a paper, include its subjects, experimental conditions, and metrics too.
Distinguish author, subject, publisher, and source
If the person being introduced differs from the writer, distinguish them with about and author. Put the publishing organization in publisher. If a library employee introduces an author event, for example, author is the employee, about is the event, and publisher is the library.
Use consistent identifiers for the website, publisher, subject, and document. Adding a new publication revision number to a document's @id each time can represent every edit as a different document. For example, retain https://example.com/#document-123 based on the document ID, updating only dates and content to the current published version. A stable identifier allows multiple structured-data records to refer to the same document.
Explain current names, roles, operators, and addresses in the body and use the same values in corresponding structured data. Distinguish former roles and earlier operating arrangements with their periods. For people with the same name or similarly named services, provide location, work, and official introduction links that identify them.
sameAs connects URLs identifying the same entity. An organization's official introduction, Wikipedia article, or Wikidata item can serve this purpose. A news report announcing that organization's closure should be linked as citation for that claim. These properties express the entity's identity and the source of an individual claim separately. Schema.org sameAs
Link evidence beside the claim and identify its date, section, or item. A migrated article can connect its original material through isBasedOn; evidence for opening hours can use citation. Check that readers can open the link and read the same claim for the same period.
Place operator information and contact or correction routes where readers can actually find them. Label names and roles so the article author, source publisher, and website operator are not confused. Where a feature needs privacy information, link guidance matching actual collection and use. Contact links should lead to a real contact screen. Assign responsibility and a process for updating the body after correction requests.
If two libraries with the same name open at different times, a citation giving only the name cannot establish which library's hours it describes. Including location, address, operator, and the official notice provides a basis for identification. Read source or citation links to check that they give operating conditions for the same branch and period. Accurate relationships make the material verifiable more effectively than simply adding author names and links.
When a correction request arrives, identify which sentence conflicts with which evidence. If “open on the first Sunday too” is wrong, correct the closure exception in the original and record the reason and effective date. Update related articles, sharing descriptions, and your own answer materials from the same published version. Authorship and contact routes let readers report the error and verify the corrected fact.
Preserve dates, related articles, and sharing images through republication
The time an external article is collected differs from its original publication date and event date. Do not update dateModified or sitemap lastmod merely because a collector ran again. Also take care when using the latest individual article modification date as the modification date of an entire listing. If that misses withdrawals, reordering, or introduction edits, record actual listing changes or omit lastmod.
When adding an event date, store the verified date together with its evidence URL. Do not attach an arbitrary time to a fact known only by date. Convert timestamped publication times to the stated timezone, but do not shift a YYYY-MM-DD event date to the previous or following day through timezone conversion. Date labels in the body should distinguish events, reporting, and publication too.
When adding new facts to an old article, place the change date and follow-up guidance beside the original content. For example, preserve the eligibility rules in a 2025 application notice and add a link to “2026 application eligibility.” Store this relationship in the revision so the added explanation survives recollection or migration.
Related articles can be connected by content ID rather than long-stored URL strings, with titles and URLs read from the active published version at display time. Remove the link when the article is withdrawn. Do not arbitrarily republish a withdrawn historical article just to repair links.
For an article with a lead image, connect its public image and description to the sharing card. Check whether every article really needs the same default image, and provide a fallback when no image exists. Collected posts should preserve the source URL and original publication date; consider a type such as SocialMediaPosting that matches the source. Do not add VideoObject when only a photo exists.
Displayed publication dates should provide both readable text and a machine-readable date. For example, if the stored timestamp is 2026-10-23T09:00:00+09:00 and the display uses Korean time, align the time element's dateTime and visible date as below. Label event date, publication date, and modification date separately.
<p>Published <time dateTime="2026-10-23T09:00:00+09:00">October 23, 2026</time></p>
If Article or NewsArticle has a lead image, connect its public image URL through image too. Check unauthenticated requests, crawler access, and actual image content, not just whether the URL exists. Use the Article property guide to compare author, datePublished, dateModified, and image with the body.
Explain the relationship between current guidance and older timetables
Write the fictional library's current guidance as “Sundays 10–17, closed on the first Sunday and public holidays, effective from October 2026.” Add the former period and a link to current guidance to the earlier notice. Do not overwrite historical documents with the current page's creation date.
Answering “Can I visit this Sunday?” also requires deciding whether that date is the first Sunday or a public holiday. Hours alone omit necessary conditions. Connect opening-hours guidance, closure notices, and effective periods, then observe whether external answers explain the exceptions too.
Source links should lead to the relevant part of the actual opening-hours notice. When it changes, update the current body and modification date while retaining older documents as records. Make it readable to people and crawlers that the two pages concern the same fact in different periods of validity.
Avoid manipulative wording, links, and dates
Keyword stuffing unnaturally repeats words or place names to pursue rankings. Cloaking shows different content to people and search engines to manipulate rankings or deceive users. Hidden keywords, unrelated redirects, link trading for ranking manipulation, and mass-produced documents without reader value relate to Google's spam policies. Search spam policies
Check AI-written sentences against original material and correct dates, subjects, and exceptions. Mass-producing the same wording with only place names changed easily omits local addresses, schedules, and application conditions. Add the local information readers need to decide on a visit or application.
The Schema.org FAQPage type and search-engine display features are separate. Google announced that FAQ rich results would no longer appear from May 7, 2026, and that related documentation was removed. Write FAQs to answer readers' actual questions, and do not present historical display-eligibility guidance as current support. Do not mark up FAQs, reviews, products, or videos absent from the page. llms.txt is also optional and requires identifying consumers that use it; Google Search does not require it. Google's change log · Generative-search guidance
Turn the brief into actual guidance
The brief in the planning chapter becomes the following notice. Eligibility and schedule from Operating Plan A, deadlines and capacity from Registration Guide B, and cancellation instructions from Cancellation Guide C are arranged in application order.
November 2026 Family Reading Program: Registration Guide
This program brings children in grades 1–3 of elementary school together with a parent or guardian to read. Sessions take place in the children's room on Sundays, November 8 and 15, from 2 to 3 p.m. One child and one parent or guardian attend both sessions together. Participation is free; bring one book you would like to read. Operating Plan A provides the basis for eligibility, schedule, and accompaniment requirements.
Registration runs from October 26 at 9 a.m. to November 5 at 6 p.m. All times are Korea Standard Time. Ten families are accepted on a first-come, first-served basis; registration closes early if capacity is reached. Open “Apply” for this notice in the program listing and submit participant information. Registration is complete only when you confirm the receipt screen showing an application number. Registration Guide B provides the period, capacity, and completion criteria.
If you can no longer participate, cancel from the application confirmation screen by November 6 at 6 p.m. If that screen is unavailable or you need to check accompaniment requirements, use the program coordinator's contact route. Cancellation Guide C provides the cancellation deadline and contact responsibility.
Published October 24, 2026. This notice applies to the November 2026 program. After recruitment ends, mark registration closed and link the next recruitment notice when available.
The first paragraph lets readers assess the child's grade and whether accompaniment is possible. The next gives the registration deadline and capacity before application. The application number confirms completion. Retaining the applicable year and schedule after recruitment closes lets people looking up past programs check the conditions at the time.
An answer tool reading this notice can compare grade, weekday, and accompaniment requirements when asked, “Can I go with my second-grade child on the second Sunday?” Omitting the requirement to attend both sessions could wrongly recommend it to a family available for only one. That is why the first paragraph keeps all three conditions together. After publication, check whether answers and cited passages for the same question preserve these conditions.
Connect video segments, original wording, and summaries
Citing only a video title makes it hard to verify which part supports a claim. For recorded speech, store the speaker, recording date, segment start and end, transcript, and source URL. Keep the summary in a separate field and compare it with the original for omitted conditions. Text-based search and answer systems can use the transcript, while readers can verify it through the segment link.
The next exercise creates a silent video showing two notices for four seconds each. The first says Sundays 10–17; the second says closed on the first Sunday and public holidays. “Text shown in the video” reproduces the on-screen wording, while “Summary” explains both segments together in this language version. Keep transcripts and summaries separate in the same way when recording speech.
Save the following make-video-demo.mjs and video.html separately in the image-exercise folder. ffmpeg must be on PATH. Running node make-video-demo.mjs creates talk.mp4. Start the image server and open http://127.0.0.1:3031/video.html?t=4 to jump to the second segment.
import sharp from 'sharp';
import { mkdtemp, rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { spawnSync } from 'node:child_process';
// Requires Node.js 22, sharp, and ffmpeg on PATH. Creates an 8-second silent notice video.
const dir = await mkdtemp(join(tmpdir(), 'notes-video-'));
try {
const lines = ['Sunday: 10:00–17:00.', 'Closed: first Sunday and public holidays.'];
for (const [i, line] of lines.entries()) {
await sharp(Buffer.from(`<svg width="1280" height="720">
<rect width="1280" height="720" fill="#172d48"/>
<text x="640" y="360" text-anchor="middle" fill="white" font-family="sans-serif" font-size="48">${line}</text>
</svg>`)).png().toFile(join(dir, `${i}.png`));
}
const result = spawnSync('ffmpeg', ['-hide_banner', '-loglevel', 'error', '-y',
'-loop', '1', '-t', '4', '-i', join(dir, '0.png'),
'-loop', '1', '-t', '4', '-i', join(dir, '1.png'),
'-filter_complex', '[0:v][1:v]concat=n=2:v=1:a=0[v]', '-map', '[v]',
'-c:v', 'libx264', '-pix_fmt', 'yuv420p', '-movflags', '+faststart',
fileURLToPath(new URL('./talk.mp4', import.meta.url))], { stdio: 'inherit' });
if (result.error || result.status !== 0) throw result.error ?? new Error('ffmpeg failed');
} finally { await rm(dir, { recursive: true, force: true }); }
<!doctype html><html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Sunday opening-hours video</title>
<style>body{max-width:50rem;margin:24px auto;padding:0 16px;font-family:sans-serif;line-height:1.7}video{width:100%}</style>
</head><body><h1>Sunday opening-hours video</h1>
<p>Fictional Library Editorial Team · Created <time datetime="2026-10-01">October 1, 2026</time>
· Effective from October 2026</p>
<video id="video" controls preload="metadata" src="/talk.mp4"></video>
<h2>Text shown in the video</h2>
<p><a href="?t=0" data-start="0">0–4 seconds</a> Sunday: 10:00–17:00.</p>
<p><a href="?t=4" data-start="4">4–8 seconds</a> Closed: first Sunday and public holidays.</p>
<h2>Summary</h2>
<p>Open Sundays 10–17. Closed on the first Sunday and public holidays.</p>
<p>This exercise turns two notices into a video. There is no audio.</p>
<p><a id="share" href="?t=0">Selected segment URL</a></p>
<script>
const video = document.querySelector('#video');
const share = document.querySelector('#share');
function seek(value) {
const seconds = Number(value);
if (!Number.isFinite(seconds) || seconds < 0 || seconds >= video.duration) return;
video.currentTime = seconds;
const url = new URL(location.href);
url.searchParams.set('t', String(seconds));
history.replaceState(null, '', url);
share.href = url.href;
}
video.addEventListener('loadedmetadata', () => seek(new URL(location.href).searchParams.get('t') ?? 0));
document.querySelectorAll('[data-start]').forEach(link => link.addEventListener('click', event => {
if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
if (video.readyState < 1) return; // Without metadata, follow the normal link.
event.preventDefault(); seek(link.dataset.start);
}));
</script></body></html>
make-video-demo creates two notice images with sharp and joins them using ffmpeg's concat filter. spawnSync receives an argument array, so text is not executed as shell commands. In video.html, loadedmetadata marks the point when the video's duration can be read. seek checks that the seconds value is valid and changes currentTime. Clicking a segment link changes both playback position and the shared URL's t value. Opening that URL in a new window jumps to the same position after loadedmetadata.
A summary saying “available every Sunday without exception” reads only the hours on the first screen and omits the exception on the second. A link only to second 0 makes that error hard to detect. Link the hours claim to the first segment and the closure exception to the second, using both conditions in the full answer. Whether a link actually seeks and whether its segment supports the statement are separate checks.
video.html is the page URL for watching the video and reading its description; talk.mp4 is the media-file URL. An external player embedded in an iframe also has a separate embed URL. Put the media file in VideoObject's contentUrl and the player address in embedUrl. For video search, prepare a watch page where the video is the main content, stable thumbnail and video access, and relevant metadata together. Google's video guide
Seeking by seconds may cause the browser to request a range of media bytes. The exercise server reads Range and returns that portion with 206 and Content-Range; requests outside the file return 416. On a server that only sends the entire file with 200, playback may revert even after currentTime is set. Check the seeking code and the media delivery path together. HTTP Range requests