Protect Privacy with a Tracking Consent Banner (追跡同意バナーによるプライバシーの保護) を参照してください。

Progressive Web App (PWA) Kitのサイトに追跡同意バナーを表示して、買い物客の信頼を維持します。バナーを使用すると、買い物客は PWA Kit に含まれるデフォルトのアクティビティ追跡をオプトインまたはオプトアウトできます。

このガイドでは、トラッキング同意バナーのデフォルトの実装とカスタマイズオプションについて説明します。

このガイドで説明する機能は、ハイブリッドストアフロントではサポートされていません。

Note

前提条件 

追跡同意バナーを構成して使用するには、Retail React Appバージョン 6.0 以降でサイトを構築します。

デフォルトの追跡同意の実装 

バナー UI 

トラッキング同意バナーはtemplate-retail-react-app/app/components/_app/index.jsxで利用できるため、サイトのどのページにも表示できます。バナーはtemplate-retail-react-app/app/hooks/use-dnt-notification.jsで定義されます。

既定では、バナーは次の例のようになります。

同意プロセスの追跡

Do Not Track値 

これらは、DNT 状態の設定を定義する 2 つの値です。

  • effectiveDnt:設定したデフォルトの DNT 状態に設定されるか、デフォルトの DNT 状態を設定しなかった場合はfalseに設定されます。この値は、買い物客が追跡に同意した場合はfalseに設定され、買い物客が追跡をオプトアウトした場合はtrueに設定されます。
  • selectedDnt:買い物客が同意バナーを操作するまで未定義です。この値は、買い物客が追跡に同意した場合はfalseに設定され、買い物客が追跡をオプトアウトした場合はtrueに設定されます。

バナーと DNT ワークフロー 

買い物客がバナーを閉じた場合、またはバナーで選択を行わなかった場合、デフォルトの DNT 状態はfalse (アクティビティの追跡) に設定されます。この動作を変更するには、デフォルトの DNT 状態の設定を参照してください。このバナーは、買い物客が以下のいずれかの操作を行った後に次回サイトを訪問したときに再表示されます。

  • ブラウザを閉じます
  • サイトデータの更新
  • Cookie を消去する

以下の図は、追跡同意バナーの動作と、買い物客がサイトを訪問したときの DNT 状態の設定方法をまとめたものです。

特に明記されていない限り、この図のすべてのステップは、ゲスト買い物客と既知の買い物客の両方に適用されます。

同意プロセスの追跡

デフォルトの DNT 状態の設定 

必要に応じて、買い物客が追跡同意バナーを閉じた場合、またはバナーで選択を行わなかった場合に適用されるデフォルトの DNT 状態を指定できます。これを行うには、プロジェクトのこのファイルのdefaultDNTプロパティ{overridesDir}/app/components/_app-config/index.jsxを設定します。

  • defaultDnt={true}:買い物客のアクティビティが追跡されないことを示します。
  • defaultDnt={false}:買い物客のアクティビティが追跡されることを示します。

この例では、defaultDntfalseに設定されています。

1// More code here...
2
3   <CommerceApiProvider
4            shortCode={commerceApiConfig.parameters.shortCode}
5            clientId={commerceApiConfig.parameters.clientId}
6            organizationId={commerceApiConfig.parameters.organizationId}
7            siteId={locals.site?.id}
8            locale={locals.locale?.id}
9            currency={locals.locale?.preferredCurrency}
10            redirectURI={`${appOrigin}/callback`}
11            proxy={`${appOrigin}${commerceApiConfig.proxyPath}`}
12            headers={headers}
13            // Add your chosen default DNT state.
14            defaultDnt={false}
15            // Uncomment 'enablePWAKitPrivateClient' to use SLAS private client login flows.
16            // Make sure to also enable useSLASPrivateClient in ssr.js when enabling this setting.
17            // enablePWAKitPrivateClient={true}
18            logger={createLogger({packageName: 'commerce-sdk-react'})}
19        >
20            <MultiSiteProvider site={locals.site} locale={locals.locale} buildUrl={locals.buildUrl}>
21                <ChakraProvider theme={theme}>{children}</ChakraProvider>
22            </MultiSiteProvider>
23            <ReactQueryDevtools />
24   </CommerceApiProvider>
25
26   // More code here...

追跡同意バナーのカスタマイズ 

必要に応じて、追跡同意バナーの外観やテキストなどの一部を変更することでカスタマイズできます。そのためには、次の 2 つの選択肢があります。

  1. 買い物客の追跡環境設定の管理」の説明に従って API とフックを使用します。

または

  1. 基本テンプレートのバナー ファイルを上書きするには、次の手順を実行します。

    • まだ行っていない場合は、PWA Kit プロジェクトにhooks in {overridesDir}/appというフォルダーを作成します。
    • hooksフォルダーにuse-dnt-notification.jsというファイルを作成します。
    • このコードをコピーしてuse-dnt-notification.jsに貼り付けます。この例では、selectedDntを使用して、DntNotificationコンポーネントによって制御されるカスタマイズされたバナーをレンダリングします。また、updateDnt関数を使用して、買い物客の追跡設定をブール値として適用します。「Do Not Track値」を参照してください。
1import React, {useEffect} from 'react'
2import PropTypes from 'prop-types'
3import {FormattedMessage, useIntl} from 'react-intl'
4import {
5    Button,
6    Modal,
7    ModalContent,
8    ModalBody,
9    ModalCloseButton,
10    useDisclosure,
11    Heading,
12    Stack,
13    Text,
14    Flex
15} from '@salesforce/retail-react-app/app/components/shared/ui'
16import {useDNT} from '@salesforce/commerce-sdk-react'
17import {useLocation} from 'react-router-dom'
18
19export const DntNotification = ({isOpen, onOpen, onClose}) => {
20    const {selectedDnt, updateDNT} = useDNT()
21    const {formatMessage} = useIntl()
22    const location = useLocation()
23
24    useEffect(() => {
25        if (selectedDnt === undefined) {
26            onOpen()
27        } else {
28            onClose()
29        }
30    }, [location, selectedDnt])
31
32    const onCloseNotification = () => {
33        updateDNT(null)
34        onClose()
35    }
36
37    return (
38        <Modal
39            size="sm"
40            data-testid="sf-dnt-notification"
41            blockScrollOnMount={false}
42            closeOnOverlayClick={false}
43            trapFocus={false}
44            isOpen={isOpen}
45            onOpen={onOpen}
46            onClose={onCloseNotification}
47        >
48            <ModalContent
49                position="fixed"
50                bottom="4"
51                right="4"
52                maxW="400px"
53                pointerEvents="all"
54                containerProps={{
55                    pointerEvents: 'none'
56                }}
57                border="2px solid"
58            >
59                <ModalCloseButton
60                    aria-label={formatMessage({
61                        id: 'dnt_notification.button.assistive_msg.close',
62                        defaultMessage: 'Close consent tracking form'
63                    })}
64                />
65                <ModalBody pb={8} bg="white" marginTop={4}>
66                    <Heading as="h3" fontSize={25} width="100%" marginBottom={5}>
67                        <FormattedMessage
68                            defaultMessage="Your Privacy Matters to Us"
69                            id="dnt_notification.title"
70                        />
71                    </Heading>
72                    <Flex direction="column">
73                        <Text>
74                            <FormattedMessage
75                                defaultMessage="We collect data to improve your experience, deliver personalized content or ads, and better understand how our site is used. By selecting 'Accept,' you agree to our use of tracking technologies. "
76                                id="dnt_notification.description"
77                            />
78                        </Text>
79                        <Stack direction="column" spacing={4} mt={4} align="flex-end">
80                        <>
81                            <Button
82                                onClick={() => {
83                                    updateDNT(true)
84                                    onClose()
85                                }}
86                                width="100%"
87                            >
88                                <FormattedMessage defaultMessage="Decline" id="dnt_notification.button.decline" />
89                            </Button>
90                            <Button
91                                onClick={() => {
92                                    updateDNT(false)
93                                    onClose()
94                                }}
95                                width="100%"
96                            >
97                                <FormattedMessage defaultMessage="Accept" id="dnt_notification.button.accept" />
98                            </Button>
99                        </>
100                        </Stack>
101                    </Flex>
102                </ModalBody>
103            </ModalContent>
104        </Modal>
105    )
106}
107
108DntNotification.propTypes = {
109    isOpen: PropTypes.bool.isRequired,
110    onOpen: PropTypes.func.isRequired,
111    onClose: PropTypes.func.isRequired
112}
113
114/**
115 *
116 * @returns {Object} - Object props to be passed into the DntNotification component
117 */
118export const useDntNotification = () => {
119    const {isOpen, onOpen, onClose} = useDisclosure()
120
121    return {
122        isOpen,
123        onOpen,
124        onClose
125    }
126}
  • PWA Kit プロジェクトでapp/components/_app/index.jsxファイルを上書きした場合は、useDntNotificationフックを使用して、カスタマイズした追跡同意バナーを表示します。
1import {
2    DntNotification,
3    useDntNotification
4} from '{overridesDir}/app/hooks/use-dnt-notification'
5
6const App = (props) => {
7   ...
8   const dntNotification = useDntNotification()
9   ...
10   
11   return (
12        ...
13        // Put the consent tracking banner in your chosen location in your code by adding the dntNotification component.
14        <DntNotification {...dntNotification} />
15        ...
16   )
17}

DNT 状態に基づく追跡の抑制 

必要に応じて、PWA Kit プロジェクトにコードを追加し、買い物客の追跡環境設定やデフォルトの DNT 状態に基づいてアクションをトリガーまたは防止できます。

effectiveDntを使用して、API 呼び出しなどのアクションをトリガーまたは防止します。たとえば、Google アナリティクスにアクセスするための API 呼び出しなどです。「Do Not Track値」を参照してください。

この例では、effectiveDntを使用して、買い物客のサイトとのインタラクションに基づいてデータを収集することを目的とした分析 API 呼び出しをトリガーします。このデータは、買い物客の行動、Web サイトのトラフィック、販売実績などの要因に関する分析情報を提供できます。

1import {
2    useDNT
3} from '@salesforce/commerce-sdk-react'
4function reportClickTracking() {
5  const {effectiveDnt} = useDNT()
6  if (effectiveDnt) {
7    return
8  }
9  return fetch('https://tracking.example.com/collect')
10}

注意事項 

  • 買い物客が追跡をオプトアウトした場合 (DNT 状態がtrueに設定されている場合)、または DNT 状態が設定されていない場合:

    • Einstein イベントは抑制されます。つまり、サイトでの買い物客のアクティビティはReports & Dashboardsには含まれません。
    • アクティブデータのメトリクスは、アクティブデータの説明に従って機能を有効にした場合に収集されます。ただし、買い物客のデータはすべて匿名化されます。
  • PWA Kit は、Business Manager のプライバシー環境設定で設定したデフォルトの追跡構成を上書きします。PWA Kit サイトでは、次のいずれかの構成が適用されます。

    • PWA Kitこのガイドで説明するデフォルトまたはカスタムのトラッキング設定。
    • Shopper Login and API Access Service (SLAS) の概要 SLAS を使用して追跡同意バナーをカスタマイズした場合、サイトでは「買い物客の追跡環境設定の管理」に記載されている追跡構成が適用されます。

追跡の同意のトラブルシューティング 

このセクションでは、追跡同意バナーの使用中に発生する可能性のある一般的なエラーの解決策を提案します。

バナーが表示されない、または動作が予期しない 

原因: CSS や JavaScript の問題により、特定のデバイスやブラウザーで機能が妨げられたり、バナーが正しく表示されなかったり、まったく表示されなかったりすることがあります。

**推奨される解決策:**バナーを複数のブラウザーとデバイスでテストして、機能に一貫性があることを確認します。より厳格なCookieポリシー(Safariのインテリジェントトラッキング防止など)を備えたブラウザには特に注意してください。さまざまな画面サイズと解像度をテストして、バナーが応答性が高く、ユーザーフレンドリーであることを確認します。バナーがサイトの機能や買い物客のインタラクションの妨げにならないことを確認します。

その他の参照項目