JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
+ JavaScript の質問用スレッド vol.123 +
http://peace.2ch.net/test/read.cgi/hp/1423915644/
(ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです)
探検
+ JavaScript の質問用スレッド vol.124 + [転載禁止]©2ch.net
レス数が900を超えています。1000を超えると表示できなくなるよ。
2015/03/22(日) 16:19:45.75ID:nW67tQ7U
810デフォルトの名無しさん
2018/02/04(日) 19:33:02.43ID:18SFip1y >>809
その通り
レイアウトを担当する所謂jQueryライブラリには関係があるかも知れないが、本体とは関係ない
ただ仕様群のうちTyped OMだけは幅広いユーザーやライブラリに影響もとい恩恵がある
その通り
レイアウトを担当する所謂jQueryライブラリには関係があるかも知れないが、本体とは関係ない
ただ仕様群のうちTyped OMだけは幅広いユーザーやライブラリに影響もとい恩恵がある
811デフォルトの名無しさん
2018/02/05(月) 11:43:34.20ID:rrC2uMN7 ReactとTypeScriptはHTMLに型を与えてくれた。
IDE経由で必要なプロパティが分かるのはほんとありがたい。
cssもそういう方向に進んでくれたらありがたい
IDE経由で必要なプロパティが分かるのはほんとありがたい。
cssもそういう方向に進んでくれたらありがたい
812デフォルトの名無しさん
2018/02/05(月) 14:03:07.36ID:Ubmn5+B6 値を文字列として読み書きするのが.innerHTMlのように時代遅れになる日も近いな
813デフォルトの名無しさん
2018/02/06(火) 12:17:27.83ID:xnYBrrOR 上で話題になってたことと関連して
今年はロックやスケジューリング機能が入ったマルチスレッドDOMの話が進みそう
今非同期を使い倒さないといけないのって、結局UIスレッドが1つでメインスクリプトはそれを妨害しないように動かないといけないからで
Houdiniと一緒にDOMもパーツ毎に別スレッドで制御できれば、ただ同期的に書けばいいだけになるよね
今年はロックやスケジューリング機能が入ったマルチスレッドDOMの話が進みそう
今非同期を使い倒さないといけないのって、結局UIスレッドが1つでメインスクリプトはそれを妨害しないように動かないといけないからで
Houdiniと一緒にDOMもパーツ毎に別スレッドで制御できれば、ただ同期的に書けばいいだけになるよね
814デフォルトの名無しさん
2018/02/06(火) 17:27:24.12ID:xat7U2Z1815デフォルトの名無しさん
2018/02/06(火) 20:43:33.16ID:990+1fTh マルチスレッドDOMってどこで検討が進んでるの?
816デフォルトの名無しさん
2018/02/06(火) 23:49:08.32ID:8DjF9uYT マルチスレッド自体はWorkerや非同期XHR、タイマーなどでもできるが
マルチスレッドDOMって何ぞ?
マルチスレッドDOMって何ぞ?
817デフォルトの名無しさん
2018/02/07(水) 00:29:03.84ID:v+xEfL1+818デフォルトの名無しさん
2018/02/07(水) 00:51:26.45ID:58msOu+q 読んでないけど、ページを論理的に分割する方法があれば
マルチスレッドDOMは実現できるでしょ?
コンポーネントに分割して外部とやり取りする
インターフェース経由でしかアクセス出来ないようにすれば良い
マルチスレッドDOMは実現できるでしょ?
コンポーネントに分割して外部とやり取りする
インターフェース経由でしかアクセス出来ないようにすれば良い
819816
2018/02/07(水) 07:05:53.98ID:ZpMnd+tU メニューと本文を別々にロードするようなものなら、XHRを2つ使えば可能なんだけど
マルチスレッドDOMはJSでやるものではなくブラウザの実装の問題じゃないのかな
たしかにテーブルや複雑な段組み表示で描画が待たされるけど
上部のレイアウトが決まらないと下部の描画ができないのはどうしようもない
擬似フレーム、レイヤー、サイドバーを別スレッドで描画するというのならできそうではあるけど
(ブラウザを作るのは人ごとなので、言うだけなら何とでも言える)
iframeで分割してpostMessage()するのは現行規格でもできるけどね
マルチスレッドDOMはJSでやるものではなくブラウザの実装の問題じゃないのかな
たしかにテーブルや複雑な段組み表示で描画が待たされるけど
上部のレイアウトが決まらないと下部の描画ができないのはどうしようもない
擬似フレーム、レイヤー、サイドバーを別スレッドで描画するというのならできそうではあるけど
(ブラウザを作るのは人ごとなので、言うだけなら何とでも言える)
iframeで分割してpostMessage()するのは現行規格でもできるけどね
820デフォルトの名無しさん
2018/02/07(水) 10:57:44.93ID:aUUcrJfq rustを使って開発してるFirefoxの
レンダリングエンジンはマルチコアに最適化してるんだっけ
ということはマルチスレッドでDOMが動いてる?
とりあえず最終的な描画部分はマルチスレッドになったとしてもjs側はシングルスレッドのままな気がする。
そもそも描画系以外の処理はserviceWorkerとか使えばマルチスレッドぽくなるんだからそれで良くないか?
レンダリングエンジンはマルチコアに最適化してるんだっけ
ということはマルチスレッドでDOMが動いてる?
とりあえず最終的な描画部分はマルチスレッドになったとしてもjs側はシングルスレッドのままな気がする。
そもそも描画系以外の処理はserviceWorkerとか使えばマルチスレッドぽくなるんだからそれで良くないか?
821デフォルトの名無しさん
2018/02/07(水) 18:14:47.81ID:v+xEfL1+ レイアウトとレンダリングに関してはすでにHoudiniで定義されている
Workerはオーバーヘッドが大きいのでWorkletという
レンダリングエンジンの各作業スレッドの拡張ポイントとしてJSを動かす仕組みで行う
あとある部分のレイアウトが完全に決まっていなくてもとりあえずの値で確定させて描画ができる
画像が読み込み中の場合を考えたらいい
Workerはオーバーヘッドが大きいのでWorkletという
レンダリングエンジンの各作業スレッドの拡張ポイントとしてJSを動かす仕組みで行う
あとある部分のレイアウトが完全に決まっていなくてもとりあえずの値で確定させて描画ができる
画像が読み込み中の場合を考えたらいい
822デフォルトの名無しさん
2018/02/07(水) 20:15:34.39ID:ZpMnd+tU 単にマルチスレッドで複数の要素をアニメーションさせたいだけであれば、
アニメーションさせたい要素の数だけタイマーを生成すれば可能かと
(ただしJSアニメーションはCSSアニメーションに比べて処理速度が遅い)
シングルスレッドのアニメーション(タイマーを1つ生成)
function anim_all(){
要素Aをアニメーション;
要素Bをアニメーション;
requestAnimationFrame(anim_all);
}
requestAnimationFrame(anim_all);
マルチスレッドのアニメーション(タイマーを2つ生成)
function anim_a(){
要素Aをアニメーション;
requestAnimationFrame(anim_a);
}
function anim_b(){
要素Bをアニメーション;
requestAnimationFrame(anim_b);
}
requestAnimationFrame(anim_b);
アニメーションさせたい要素の数だけタイマーを生成すれば可能かと
(ただしJSアニメーションはCSSアニメーションに比べて処理速度が遅い)
シングルスレッドのアニメーション(タイマーを1つ生成)
function anim_all(){
要素Aをアニメーション;
要素Bをアニメーション;
requestAnimationFrame(anim_all);
}
requestAnimationFrame(anim_all);
マルチスレッドのアニメーション(タイマーを2つ生成)
function anim_a(){
要素Aをアニメーション;
requestAnimationFrame(anim_a);
}
function anim_b(){
要素Bをアニメーション;
requestAnimationFrame(anim_b);
}
requestAnimationFrame(anim_b);
823デフォルトの名無しさん
2018/02/07(水) 20:42:03.07ID:v+xEfL1+ Animationはまた別個にWorklet仕様がある
https://wicg.github.io/animation-worklet/
https://wicg.github.io/animation-worklet/
824デフォルトの名無しさん
2018/02/07(水) 20:45:47.82ID:ZTCS93cG ついでだから聞くんだけどxhrをworkerで動かしてるサンプルがあったんだけど
あれって普通にxhr使うより早くなんの?
あれって普通にxhr使うより早くなんの?
825デフォルトの名無しさん
2018/02/08(木) 02:27:56.97ID:VQ9z9vC7 ファイルを取得するとこまでは殆ど関係ないけど
それを使って重い処理をWorkerでするのなら
取得もWorkerでするのが普通でしょ
それを使って重い処理をWorkerでするのなら
取得もWorkerでするのが普通でしょ
826デフォルトの名無しさん
2018/02/12(月) 00:04:36.56ID:pR3wczEv JavaScriptで大文字と小文字の使い分けをどうしているのかが最大の謎
たとえばJavaなら
Hoge hoge = new Hoge();
ならば、「hoge」はインスタンス、そして「Hoge」はクラス名
だと分かる。
ところが、JSの場合、
var hoge = new Hoge();
のとき「Hoge」はクラスではなくこちらも「オブジェクト」だから、
「hoge」も「オブジェクト」「Hoge」も「オブジェクト」じゃん?
だけど片方は大文字で片方は小文字だから結局「頭が大文字な変数」と
「頭が小文字な変数」の何を見分けていいかわからなくなる。
「hoge」があったときにこれがオブジェクトなのか関数なのか
プロトタイプなのかコンストラクタなのか一体何者なのかさっぱり分からん。
たとえばJavaなら
Hoge hoge = new Hoge();
ならば、「hoge」はインスタンス、そして「Hoge」はクラス名
だと分かる。
ところが、JSの場合、
var hoge = new Hoge();
のとき「Hoge」はクラスではなくこちらも「オブジェクト」だから、
「hoge」も「オブジェクト」「Hoge」も「オブジェクト」じゃん?
だけど片方は大文字で片方は小文字だから結局「頭が大文字な変数」と
「頭が小文字な変数」の何を見分けていいかわからなくなる。
「hoge」があったときにこれがオブジェクトなのか関数なのか
プロトタイプなのかコンストラクタなのか一体何者なのかさっぱり分からん。
827デフォルトの名無しさん
2018/02/12(月) 00:17:33.53ID:uxSxkNmu >>826
実体が○○だから、こうするって考え方は初心者だよ
どうしたいのか、どういう意図を込めたいのか、その考えをコードに反映させる。
と言っても意味がわからないだろうな。
古いGoogleのコーディング規約だがその一節にこういうものが有る
http://cou929.nu/data/google_javascript_style_guide/#constant-values
> 一定で不変であることを意図した値には CONSTANT_VALUE_CASE のように定数としての名前をつけます.
> 加えて, すべてを大文字にし単語をアンダースコアで区切るようにすることは
> @const (その値は overwrite できない) という意味にもなります..
これが書かれた当時はconstというものはなく、実体は只の変数にすぎない。
只の変数に「定数である」という意図を込めるために、全部大文字にするわけだ
Hogeも同じ。実体が関数かオブジェクトかってのは関係ない。
例え実体は関数やオブジェクトであっても、それ(Hoge)にクラスだよという
意図を込めるために大文字で始める。
ならばそれを見た人は、Hogeをクラス名だと考えるようにしないといけない
(もちろんコーディング規約次第だが)
Hogeをどのように作り出すかは関係なく、大文字で始まっているのだからそれはクラス
逆に言えば、クラスとして見せたいから大文字で始める。そういう意図を込めるわけだよ。
コードっていうのは自分の考えを反映させて書くもの。
コードがどうなっているかではなく、自分がどうしたいか。
そして読むときは書いた人の意図を読み取れるようなろう。
実体が何かで考えているうちはまだまだ初心者
> 「hoge」があったときにこれがオブジェクトなのか関数なのか
一般的にはhogeが名詞ならオブジェクト。動詞なら関数。
実体が○○だから、こうするって考え方は初心者だよ
どうしたいのか、どういう意図を込めたいのか、その考えをコードに反映させる。
と言っても意味がわからないだろうな。
古いGoogleのコーディング規約だがその一節にこういうものが有る
http://cou929.nu/data/google_javascript_style_guide/#constant-values
> 一定で不変であることを意図した値には CONSTANT_VALUE_CASE のように定数としての名前をつけます.
> 加えて, すべてを大文字にし単語をアンダースコアで区切るようにすることは
> @const (その値は overwrite できない) という意味にもなります..
これが書かれた当時はconstというものはなく、実体は只の変数にすぎない。
只の変数に「定数である」という意図を込めるために、全部大文字にするわけだ
Hogeも同じ。実体が関数かオブジェクトかってのは関係ない。
例え実体は関数やオブジェクトであっても、それ(Hoge)にクラスだよという
意図を込めるために大文字で始める。
ならばそれを見た人は、Hogeをクラス名だと考えるようにしないといけない
(もちろんコーディング規約次第だが)
Hogeをどのように作り出すかは関係なく、大文字で始まっているのだからそれはクラス
逆に言えば、クラスとして見せたいから大文字で始める。そういう意図を込めるわけだよ。
コードっていうのは自分の考えを反映させて書くもの。
コードがどうなっているかではなく、自分がどうしたいか。
そして読むときは書いた人の意図を読み取れるようなろう。
実体が何かで考えているうちはまだまだ初心者
> 「hoge」があったときにこれがオブジェクトなのか関数なのか
一般的にはhogeが名詞ならオブジェクト。動詞なら関数。
828デフォルトの名無しさん
2018/02/12(月) 10:56:03.12ID:Bjvkgrzm 馬鹿は答えるな。node.jsのwsモジュールでws.oncloseに関数を代入するやりかたと
ws.on('close',callback)を使うやりかたのなにが違うのか分かりません。
教えてください。
ws.on('close',callback)を使うやりかたのなにが違うのか分かりません。
教えてください。
829デフォルトの名無しさん
2018/02/12(月) 11:26:10.44ID:uxSxkNmu 答えたやつは馬鹿
830デフォルトの名無しさん
2018/02/13(火) 10:28:09.45ID:ckcHf5yp CSSエンジンをJavaScriptで組んだものってありますか?
831デフォルトの名無しさん
2018/02/13(火) 11:04:35.19ID:b5aNFBbA CSSエンジンってなんや?
どこからどこまでをさすんや?
どこからどこまでをさすんや?
832デフォルトの名無しさん
2018/02/13(火) 11:27:41.20ID:ckcHf5yp HTMLとCSSをレンダリングするようなやつです
floatのアルゴリズムを知りたいのです
floatのアルゴリズムを知りたいのです
833デフォルトの名無しさん
2018/02/13(火) 14:03:13.60ID:Smr8o+jz じゃPhantomJS
834デフォルトの名無しさん
2018/02/13(火) 16:18:30.17ID:xpZzv5qK SPAを作る時にページが存在しない場合にをどうやって404を返せばいいんでしょうか?
現状
https://support.google.com/webmasters/answer/181708?hl=ja
に示すみたいにソフト404エラーみたいになってるんですが
SPAでステータスコードを返す方法がよくわからないんです。
現状
https://support.google.com/webmasters/answer/181708?hl=ja
に示すみたいにソフト404エラーみたいになってるんですが
SPAでステータスコードを返す方法がよくわからないんです。
835デフォルトの名無しさん
2018/02/13(火) 17:42:13.75ID:Smr8o+jz836デフォルトの名無しさん
2018/02/13(火) 19:42:45.41ID:xpZzv5qK >>835
つまり404は普通にwebPageとして作ってリダイレクトしろよと。
つまり404は普通にwebPageとして作ってリダイレクトしろよと。
837デフォルトの名無しさん
2018/02/14(水) 15:28:31.17ID:J4+KYKOE それは現実的じゃないと思うな
直リンクとSPAでの遷移が違うと不自然だし
SPAでの遷移で存在しない場合リダイレクトするのも不自然だし
今だとServiceWorkerとかもあるし
直リンクとSPAでの遷移が違うと不自然だし
SPAでの遷移で存在しない場合リダイレクトするのも不自然だし
今だとServiceWorkerとかもあるし
838デフォルトの名無しさん
2018/02/14(水) 17:37:54.60ID:H2gVyVCN ソフト404でいいと思うけどな。googleが悪い。
839デフォルトの名無しさん
2018/02/14(水) 18:57:53.49ID:D3O9gfhg なんでもいい!ユーザーはそんなの気にしてない!
840デフォルトの名無しさん
2018/02/14(水) 19:42:05.87ID:JUbcUui+ そもそも誰が誰に404を返すようにしたいのか
841デフォルトの名無しさん
2018/02/15(木) 00:01:48.36ID:6MYE6XLg842デフォルトの名無しさん
2018/02/15(木) 00:56:50.81ID:YSj3CECL SPAとしての決まりはあんまりない感じなんですかね?stackoverflowを見るとgoogleがリダイレクトで404で飛ばすようにサービス作ってるからそれでいいのでは?という話でした。
843デフォルトの名無しさん
2018/02/15(木) 02:21:06.62ID:+9FZRT3l SPAっていうのもピンきりだから
mobile jQueryを使ったりしてただ単にリクエスト量削減のオマケなら404を返せばいいし、
アプリケーションと呼ぶようなものならそうしなければいい
mobile jQueryを使ったりしてただ単にリクエスト量削減のオマケなら404を返せばいいし、
アプリケーションと呼ぶようなものならそうしなければいい
844デフォルトの名無しさん
2018/02/15(木) 06:30:29.99ID:+9FZRT3l >>842
Googleの場合色んな検索窓があるページがSPAだけど、
考え方によっちゃヒットの無いキーワードでの検索っていうのは
404に当たるものだけど返してないよね
逆にそういう1つのアプリケーション内で
404にリダイレクトせざるを得ない事なんて考えにくいよね
Googleの場合色んな検索窓があるページがSPAだけど、
考え方によっちゃヒットの無いキーワードでの検索っていうのは
404に当たるものだけど返してないよね
逆にそういう1つのアプリケーション内で
404にリダイレクトせざるを得ない事なんて考えにくいよね
845デフォルトの名無しさん
2018/02/15(木) 06:57:50.10ID:6MYE6XLg リダイレクトは300番台だぞ
846デフォルトの名無しさん
2018/02/15(木) 07:02:37.33ID:6MYE6XLg 検索結果が0件であることと、検索結果ページが存在しないことは別物
847デフォルトの名無しさん
2018/02/15(木) 08:11:26.78ID:CMBfD/sb848デフォルトの名無しさん
2018/02/15(木) 08:55:12.72ID:8SUVFt/S849デフォルトの名無しさん
2018/02/15(木) 10:01:16.08ID:6MYE6XLg850デフォルトの名無しさん
2018/02/15(木) 10:04:09.93ID:8SUVFt/S んで、質問内容は、リンクを辿った先のページがない時に
404を返すにはどうするかって話だろ
404を返すにはどうするかって話だろ
851デフォルトの名無しさん
2018/02/15(木) 10:45:25.62ID:6MYE6XLg852デフォルトの名無しさん
2018/02/15(木) 10:45:55.81ID:1CgTZOOO 犬がたくさん出てくる映画は?
853デフォルトの名無しさん
2018/02/15(木) 12:40:11.35ID:8SUVFt/S854デフォルトの名無しさん
2018/02/15(木) 12:59:26.53ID:U3TCQJmI 404に独立したページが存在したらそれってSPAじゃなくない?
855デフォルトの名無しさん
2018/02/15(木) 13:05:22.69ID:8SUVFt/S 独立したページ?それは曖昧な言い方だな
SPAっていうのは、一つのページ(HTML+JavaScript)が
複数のURLを持っているものなんだよ。
もちろん一つのURLだけを持つのもありだが、
それだとSEO的にあまり良くないからな
一見複数のページが有るように見えても実際は
一つのページになってるように作るのがSPAだ
SPAっていうのは、一つのページ(HTML+JavaScript)が
複数のURLを持っているものなんだよ。
もちろん一つのURLだけを持つのもありだが、
それだとSEO的にあまり良くないからな
一見複数のページが有るように見えても実際は
一つのページになってるように作るのがSPAだ
856デフォルトの名無しさん
2018/02/15(木) 13:10:14.71ID:1CgTZOOO > 複数のURLを持っているものなんだよ。
持ってないよ。複数のURLどれでも同じページ返してjsでパスに応じて内容切り替えてるだけだよ。
持ってないよ。複数のURLどれでも同じページ返してjsでパスに応じて内容切り替えてるだけだよ。
857デフォルトの名無しさん
2018/02/15(木) 13:16:17.44ID:8SUVFt/S > 複数のURLどれでも〜内容切り替えてるだけだよ。
それ複数のURL持ってますねwww
それ複数のURL持ってますねwww
858デフォルトの名無しさん
2018/02/15(木) 13:28:35.51ID:1CgTZOOO ああそういう意味か
859デフォルトの名無しさん
2018/02/15(木) 13:34:00.16ID:8SUVFt/S で、話を戻すと
複数のURLどれでも同じページを返す・・・
ということは
複数のURL(存在しないページ含む)のどれでも同じページを返す
から単純にやったら404にはならないということ
URL直接入力だったらサーバーが介在する余地があるからまだどうにかなるが、
存在しないページに対してSPAからアクセスした時に
そのページ(URL)をどうやって404にするのか?という話がでてくる
複数のURLどれでも同じページを返す・・・
ということは
複数のURL(存在しないページ含む)のどれでも同じページを返す
から単純にやったら404にはならないということ
URL直接入力だったらサーバーが介在する余地があるからまだどうにかなるが、
存在しないページに対してSPAからアクセスした時に
そのページ(URL)をどうやって404にするのか?という話がでてくる
860デフォルトの名無しさん
2018/02/15(木) 15:32:52.51ID:9pb3TF19 >>849
別もんじゃないよ
動的なアプリケーションの場合
所在地としてのURLとコンテンツの在り処には最早関係がない
逆に別にx.cgiが存在してもそれに対するクエリがコンテンツ検索のためのものなら
場合に応じてcgiが404を返したって問題ないんだから
Googleの挙動だって最初期の論文や日記くらいしかなかったWebではありえないことなのよ
今や重要なのは定義でなくどう使われてるかの意図
別もんじゃないよ
動的なアプリケーションの場合
所在地としてのURLとコンテンツの在り処には最早関係がない
逆に別にx.cgiが存在してもそれに対するクエリがコンテンツ検索のためのものなら
場合に応じてcgiが404を返したって問題ないんだから
Googleの挙動だって最初期の論文や日記くらいしかなかったWebではありえないことなのよ
今や重要なのは定義でなくどう使われてるかの意図
861デフォルトの名無しさん
2018/02/15(木) 15:43:52.20ID:xvxGqpCI ひとまず
https://stackoverflow.com/questions/37334220/how-do-i-return-a-http-404-status-code-from-a-spa
上記リンクの情報に従うと
404 page にリダイレクトさせることでステータスコードを返すって方法しかない
ということでいいでしょうか?
js側でステータスコードを返したようにブラウザに認識させる方法とか
あるのかなーと期待していたんですが、、、
https://stackoverflow.com/questions/37334220/how-do-i-return-a-http-404-status-code-from-a-spa
上記リンクの情報に従うと
404 page にリダイレクトさせることでステータスコードを返すって方法しかない
ということでいいでしょうか?
js側でステータスコードを返したようにブラウザに認識させる方法とか
あるのかなーと期待していたんですが、、、
862デフォルトの名無しさん
2018/02/15(木) 15:55:44.81ID:8SUVFt/S 俺としてはまあ答はでてるんだが
ほかの人、もう少し頑張ってみてくれw
ほかの人、もう少し頑張ってみてくれw
863デフォルトの名無しさん
2018/02/15(木) 16:33:58.37ID:ilr6oKXN どうせSEOのために仕方なくでしょ。
ソフト404でいいと思うんだがSPA推してるくせにgoogleマジなにやってんの。
ソフト404でいいと思うんだがSPA推してるくせにgoogleマジなにやってんの。
864デフォルトの名無しさん
2018/02/15(木) 17:23:29.73ID:6MYE6XLg サーバー側のCGIが404を返すことは何の問題もない
PATH_INFOで動作しているCGIは404や300番台も返すことがある
例えば、 ttps://www.amazon.co.jp/dp/abcdefg
ブラウザ内部では200と404を区別してるだろうけど、見た目には200と404の違いはない
404を返す方法じゃなくて、返ってきた404コードをどのように扱うかは
SPAに限ったことではなく、Ajax全般に言えることだが
フレームワークはフレームワークにその書き方が用意されてなかったらどうにもならんだろ
生のJavascriptの場合
if( xhr.status === 200 ){
}else if( xhr.status === 404 ){
//たとえばalert()して終わり
//responseTextやあらかじめ用意しておいたエラーページを表示してpushState()
//locationでそのURLに移動する
}
自分はlocationで移動する方法はあまりいい方法とは思えんけどな
PATH_INFOで動作しているCGIは404や300番台も返すことがある
例えば、 ttps://www.amazon.co.jp/dp/abcdefg
ブラウザ内部では200と404を区別してるだろうけど、見た目には200と404の違いはない
404を返す方法じゃなくて、返ってきた404コードをどのように扱うかは
SPAに限ったことではなく、Ajax全般に言えることだが
フレームワークはフレームワークにその書き方が用意されてなかったらどうにもならんだろ
生のJavascriptの場合
if( xhr.status === 200 ){
}else if( xhr.status === 404 ){
//たとえばalert()して終わり
//responseTextやあらかじめ用意しておいたエラーページを表示してpushState()
//locationでそのURLに移動する
}
自分はlocationで移動する方法はあまりいい方法とは思えんけどな
865デフォルトの名無しさん
2018/02/15(木) 18:15:02.91ID:aKcpIhES SPAでも、ルーターで判定するだけじゃないの?
俺はそうしてるけど。
SPAなんだから、誰がどうその404と言う情報が欲しいかというと、多分エンドユーザだよ。
となると、ごく当たり前のように404に相当するコンポーネントを出すしか出来ないだろ。
それが正しく404として扱われてるか、はGoogle Search Consoleで確か確認できる。
むしろ404として扱われていないかを確認するためにも、Search Consoleは見るべきかと。
俺はそうしてるけど。
SPAなんだから、誰がどうその404と言う情報が欲しいかというと、多分エンドユーザだよ。
となると、ごく当たり前のように404に相当するコンポーネントを出すしか出来ないだろ。
それが正しく404として扱われてるか、はGoogle Search Consoleで確か確認できる。
むしろ404として扱われていないかを確認するためにも、Search Consoleは見るべきかと。
866デフォルトの名無しさん
2018/02/15(木) 19:02:16.42ID:6MYE6XLg >>864 に書いた
> //たとえばalert()して終わり
> //responseTextやあらかじめ用意しておいたエラーページを表示してpushState()
> //locationでそのURLに移動する
この部分の書き方にどんな種類があるのかを知りたいのではなく、
サーバーは404を返したけど、クライアント(フレームワーク・ルーター)が反応しないということであれば
フレームワーク・ルーターには
if( xhr.status === 200 ){
}
これしか書かれてないわけだから、
あきらめて200で処理する(いわゆるソフト404)か、フレームワーク・ルーターを作り直せという返事になる
> //たとえばalert()して終わり
> //responseTextやあらかじめ用意しておいたエラーページを表示してpushState()
> //locationでそのURLに移動する
この部分の書き方にどんな種類があるのかを知りたいのではなく、
サーバーは404を返したけど、クライアント(フレームワーク・ルーター)が反応しないということであれば
フレームワーク・ルーターには
if( xhr.status === 200 ){
}
これしか書かれてないわけだから、
あきらめて200で処理する(いわゆるソフト404)か、フレームワーク・ルーターを作り直せという返事になる
867デフォルトの名無しさん
2018/02/15(木) 19:49:37.33ID:lFngoqEs868デフォルトの名無しさん
2018/02/15(木) 19:53:50.40ID:aKcpIhES >>866
サーバが返すも何も、SPAで、fetchのレスポンスがなんて話なら、そりゃアプリケーション内部の話であってユーザには全く関係が無いかと。
そんな台所事情でエラーメッセージを出すのは404でもなんでもなく、デスクトップアプリで予期できるexceptionを吐いたときにexceptionをそのまま出力しちゃうぐらい悪手では?
かつ、少なくとも、その場合はサーバ側のロジックも結果なしという結果、にすべきなんじゃないかな。
本当にそのリソース(API)がデグレなりクライアントのキャッシュなりでバージョン不一致なりの理由で存在しない場合との切り分けが難しくなる。
RESTのAPIだから、なんて場合は404を返したいのはわかるんだけど、危険な原理主義ではないかなぁ。
サーバが返すも何も、SPAで、fetchのレスポンスがなんて話なら、そりゃアプリケーション内部の話であってユーザには全く関係が無いかと。
そんな台所事情でエラーメッセージを出すのは404でもなんでもなく、デスクトップアプリで予期できるexceptionを吐いたときにexceptionをそのまま出力しちゃうぐらい悪手では?
かつ、少なくとも、その場合はサーバ側のロジックも結果なしという結果、にすべきなんじゃないかな。
本当にそのリソース(API)がデグレなりクライアントのキャッシュなりでバージョン不一致なりの理由で存在しない場合との切り分けが難しくなる。
RESTのAPIだから、なんて場合は404を返したいのはわかるんだけど、危険な原理主義ではないかなぁ。
869デフォルトの名無しさん
2018/02/15(木) 20:57:04.69ID:6MYE6XLg >>867
HTTPヘッダの404を見て404で登録される
https://support.google.com/webmasters/answer/35120?hl=ja
URLエラーのタイプ、一般的なURLエラーのソフト404の説明書きを参考
ただ、フレームワークが200しかサポートしていない、にもかかわらず404で処理したい
というのであれば、まあ、locationしかないんじゃないかなと思うんだけど
検索エンジンに、SPAのURLとlocationでジャンプしたURLが同一だということを理解できるのかなぁ
>>868
ブログにニュース記事へのリンクを張った後に、
ニュース記事を削除した場合に404を返すようにしている
Google SEO的には410のほうがいいかもしれないけど
ページを追加、削除し、そこにリンクを張った過去のブログを更新しないことなんかはよくあることだし、制作時に対応できない
検索結果0件(コンテンツのない、またはSEOの重要度が非常に低いURLが存在する)のと、
URLそのものが存在しないのとは区別すべきというのが自分の考え方だから
HTTPヘッダの404を見て404で登録される
https://support.google.com/webmasters/answer/35120?hl=ja
URLエラーのタイプ、一般的なURLエラーのソフト404の説明書きを参考
ただ、フレームワークが200しかサポートしていない、にもかかわらず404で処理したい
というのであれば、まあ、locationしかないんじゃないかなと思うんだけど
検索エンジンに、SPAのURLとlocationでジャンプしたURLが同一だということを理解できるのかなぁ
>>868
ブログにニュース記事へのリンクを張った後に、
ニュース記事を削除した場合に404を返すようにしている
Google SEO的には410のほうがいいかもしれないけど
ページを追加、削除し、そこにリンクを張った過去のブログを更新しないことなんかはよくあることだし、制作時に対応できない
検索結果0件(コンテンツのない、またはSEOの重要度が非常に低いURLが存在する)のと、
URLそのものが存在しないのとは区別すべきというのが自分の考え方だから
870デフォルトの名無しさん
2018/02/15(木) 21:03:46.64ID:fKqsgF6j どんなURLでも同じページをサーバーが返して
そのページがデータをフェッチして表示するようなもので
クローラからのアクセスの時のみ404レスポンスを返すのはありなのか?
Googleは特別扱いするなとか言いつつ、クローラを考慮した仕様も出してるから
どうしたらいいのか難しい
そのページがデータをフェッチして表示するようなもので
クローラからのアクセスの時のみ404レスポンスを返すのはありなのか?
Googleは特別扱いするなとか言いつつ、クローラを考慮した仕様も出してるから
どうしたらいいのか難しい
871デフォルトの名無しさん
2018/02/15(木) 21:05:43.22ID:fKqsgF6j つまり検索エンジンに載せたくないという理由で
実際ページが表示できるかに関わらず404を返していいのかということ
SPA用のスマートな方法は用意されているのだろうか
実際ページが表示できるかに関わらず404を返していいのかということ
SPA用のスマートな方法は用意されているのだろうか
872デフォルトの名無しさん
2018/02/16(金) 09:40:25.43ID:kN3UBOMP >>869
自分が言いたいのはURLを動的に解釈している場合は多かれ少なかれ
URLはコンテンツの静的な住所という大原則からは外れてしまっているということ
つまり「URLそのものが存在しない」という判定が自明でなくなる
自分が言いたいのはURLを動的に解釈している場合は多かれ少なかれ
URLはコンテンツの静的な住所という大原則からは外れてしまっているということ
つまり「URLそのものが存在しない」という判定が自明でなくなる
873デフォルトの名無しさん
2018/02/16(金) 10:54:49.83ID:ijGXrmYh さて、むそろそろ俺の登場かな?
この問題はねSPAだからといってパフォーマンスさげないよね?
無駄なことはしないよね?という話で解決するんだよ。
例えば、http://example.com/foo/1 とかにアクセスした時、
index.html に30x のリダイレクトしたりはしない
なぜかって? リダイレクトしたらパフォーマンス落ちるでしょ?
つまりね。PATH_INFO(でいいかな?)の情報を持った状態で
サーバーサイドアプリが呼び出されるんだよ
そこでサーバーサイド側の仕組みを使って404を返せばいい
SPAの話なのに何を言ってるのと思うかもしれないけど、
ちゃんとしたSPAっていうのはF5を押しても同じ画面が表示されるし
URLも http://example.com/foo/1 のままになるもの
SPAは/foo/1のデータをAjaxで読み込むものだと思ってるかもしれないけど、
それは他のページから辿った場合で、直接 http://example.com/foo/1 に
アクセスした場合は、JavaScriptで取ってくるそのデータを最初からHTMLに埋め込むものなんだよ。
なぜかって? ページアクセスして表示されてからデータを取りに行くとパフォーマンスさがるだろ?
だからSPAは基本Ajaxでデータを取るのは間違ってないんだけど、最初のページに限っては
最初からHTMLに埋め込んでおく。埋め込むことができるってことは、
データが見つからない時に404を返すことも容易
そして検索エンジンとかは、基本的にAjaxを使ってデータを読んだりしない。
読むことも有るかもしれないけど、Ajaxリクエスト(Content-Type: application/json)として
そのページを読み込むことはないだろう。だからいま問題にしているどうやって404を返すか?という
話は実は当てはまらない。検索エンジンは http://example.com/foo/1 を直接読み込むのだから
Ajaxによるリクエスト、つまり別ページを読み込んでからSPAの処理としてページを読み込む場合は
そのリクエストを404にすればよい。たしかにページ自体は404にはならないんだけどね。
でも検索エンジンには関係ない話
この問題はねSPAだからといってパフォーマンスさげないよね?
無駄なことはしないよね?という話で解決するんだよ。
例えば、http://example.com/foo/1 とかにアクセスした時、
index.html に30x のリダイレクトしたりはしない
なぜかって? リダイレクトしたらパフォーマンス落ちるでしょ?
つまりね。PATH_INFO(でいいかな?)の情報を持った状態で
サーバーサイドアプリが呼び出されるんだよ
そこでサーバーサイド側の仕組みを使って404を返せばいい
SPAの話なのに何を言ってるのと思うかもしれないけど、
ちゃんとしたSPAっていうのはF5を押しても同じ画面が表示されるし
URLも http://example.com/foo/1 のままになるもの
SPAは/foo/1のデータをAjaxで読み込むものだと思ってるかもしれないけど、
それは他のページから辿った場合で、直接 http://example.com/foo/1 に
アクセスした場合は、JavaScriptで取ってくるそのデータを最初からHTMLに埋め込むものなんだよ。
なぜかって? ページアクセスして表示されてからデータを取りに行くとパフォーマンスさがるだろ?
だからSPAは基本Ajaxでデータを取るのは間違ってないんだけど、最初のページに限っては
最初からHTMLに埋め込んでおく。埋め込むことができるってことは、
データが見つからない時に404を返すことも容易
そして検索エンジンとかは、基本的にAjaxを使ってデータを読んだりしない。
読むことも有るかもしれないけど、Ajaxリクエスト(Content-Type: application/json)として
そのページを読み込むことはないだろう。だからいま問題にしているどうやって404を返すか?という
話は実は当てはまらない。検索エンジンは http://example.com/foo/1 を直接読み込むのだから
Ajaxによるリクエスト、つまり別ページを読み込んでからSPAの処理としてページを読み込む場合は
そのリクエストを404にすればよい。たしかにページ自体は404にはならないんだけどね。
でも検索エンジンには関係ない話
874デフォルトの名無しさん
2018/02/16(金) 11:13:52.52ID:PV55M7JN875デフォルトの名無しさん
2018/02/16(金) 12:12:33.62ID:ijGXrmYh > GoogleBotはちゃんとjsを解釈してくれます。
なにを解釈しているかちゃんと分かってますか?
解釈していると主張しているだけで、何をどう解釈しているかは
非公開のはずですが? どうして問題ないと信じられるのでしょうか?
なにを解釈しているかちゃんと分かってますか?
解釈していると主張しているだけで、何をどう解釈しているかは
非公開のはずですが? どうして問題ないと信じられるのでしょうか?
876デフォルトの名無しさん
2018/02/16(金) 12:31:37.30ID:PV55M7JN >>875
https://qiita.com/m0a/items/89aec890f98a599846ce
GoogleBotのchrome version調べることができます。
bot用にカスタマイズしている可能性はあるので確かに100%保証というわけではないですが
https://qiita.com/m0a/items/89aec890f98a599846ce
GoogleBotのchrome version調べることができます。
bot用にカスタマイズしている可能性はあるので確かに100%保証というわけではないですが
877デフォルトの名無しさん
2018/02/16(金) 12:34:28.83ID:ijGXrmYh878デフォルトの名無しさん
2018/02/16(金) 12:37:37.23ID:PV55M7JN >>877
>SPAは/foo/1のデータをAjaxで読み込むものだと思ってるかもしれないけど、
>それは他のページから辿った場合で、直接 http://example.com/foo/1 に
>アクセスした場合は、JavaScriptで取ってくるそのデータを最初からHTMLに埋め込むものなんだよ。
>なぜかって? ページアクセスして表示されてからデータを取りに行くとパフォーマンスさがるだろ?
>だからSPAは基本Ajaxでデータを取るのは間違ってないんだけど、最初のページに限っては
>最初からHTMLに埋め込んでおく。埋め込むことができるってことは、
>データが見つからない時に404を返すことも容易
ここに対するツッコミをしただけですよ。
>SPAは/foo/1のデータをAjaxで読み込むものだと思ってるかもしれないけど、
>それは他のページから辿った場合で、直接 http://example.com/foo/1 に
>アクセスした場合は、JavaScriptで取ってくるそのデータを最初からHTMLに埋め込むものなんだよ。
>なぜかって? ページアクセスして表示されてからデータを取りに行くとパフォーマンスさがるだろ?
>だからSPAは基本Ajaxでデータを取るのは間違ってないんだけど、最初のページに限っては
>最初からHTMLに埋め込んでおく。埋め込むことができるってことは、
>データが見つからない時に404を返すことも容易
ここに対するツッコミをしただけですよ。
879デフォルトの名無しさん
2018/02/16(金) 12:49:30.63ID:L6Zw5BDk >>873
それはSSRする場合というごく少数のSPAの場合であって、
大体はpathinfo効かせて、htmlにリダイレクトさせると思うんだが。
悪手よ。二種類のルーターの同時保守は。
hoge/foo/1は、hogeへの/foo/1というルートのパラメータであって、パスじゃない。pathinfoの時もね。
ajaxでURLとしてのfoo/1を取得するかどうかも、SPA次第であって、実はそんなこと関係なくクライアントサイドの処理で済むものなのかもしれない。
なので、404というステータスはhtmlに対してはユーザが見れうるが、各パスに対しては見ようがない。
SPAのAはApplicationのAだからね。
それはSSRする場合というごく少数のSPAの場合であって、
大体はpathinfo効かせて、htmlにリダイレクトさせると思うんだが。
悪手よ。二種類のルーターの同時保守は。
hoge/foo/1は、hogeへの/foo/1というルートのパラメータであって、パスじゃない。pathinfoの時もね。
ajaxでURLとしてのfoo/1を取得するかどうかも、SPA次第であって、実はそんなこと関係なくクライアントサイドの処理で済むものなのかもしれない。
なので、404というステータスはhtmlに対してはユーザが見れうるが、各パスに対しては見ようがない。
SPAのAはApplicationのAだからね。
880デフォルトの名無しさん
2018/02/16(金) 12:54:41.12ID:ijGXrmYh881デフォルトの名無しさん
2018/02/16(金) 12:57:19.71ID:6wcMGkCt pathinfo?
pathnameのこと?
ApplicationのAだから?
railsやexpressやspringでサーバーサイドで作ったものはApplicationではない???
pathnameのこと?
ApplicationのAだから?
railsやexpressやspringでサーバーサイドで作ったものはApplicationではない???
882デフォルトの名無しさん
2018/02/16(金) 13:01:32.14ID:ijGXrmYh >>879
> 悪手よ。二種類のルーターの同時保守は。
そんなもんする必要が無いだろ?
http://example.com/foo/1 にアクセスしたら
どうせクライアントサイドから /api/foo/1とか呼び出すんだろ?
ならその呼び出す命令の代わりに、
サーバーサイド側で http://example.com/foo/1 でアクセスした時に
同じ /api/foo/1 を呼び出せばいいだけ
汎用化できるから保守の必要はない
> 悪手よ。二種類のルーターの同時保守は。
そんなもんする必要が無いだろ?
http://example.com/foo/1 にアクセスしたら
どうせクライアントサイドから /api/foo/1とか呼び出すんだろ?
ならその呼び出す命令の代わりに、
サーバーサイド側で http://example.com/foo/1 でアクセスした時に
同じ /api/foo/1 を呼び出せばいいだけ
汎用化できるから保守の必要はない
883デフォルトの名無しさん
2018/02/16(金) 13:04:20.87ID:ijGXrmYh /api/foo/1と書いたけど、もちろん /foo/1 でもよい。
その場合、Ajax(Content-Type: application/json)からのリクエストか
どうか判別してそのページのデータのみを返すか、
HTMLを返すか切り分ければいい
その場合、Ajax(Content-Type: application/json)からのリクエストか
どうか判別してそのページのデータのみを返すか、
HTMLを返すか切り分ければいい
884デフォルトの名無しさん
2018/02/16(金) 13:10:38.43ID:EMoJP+dl そもそもGETはキャッシュラブルだとかそういうのも守れてないし
885デフォルトの名無しさん
2018/02/16(金) 13:12:18.28ID:ijGXrmYh また関係ない話が出てきたな・・・
886デフォルトの名無しさん
2018/02/16(金) 14:18:34.93ID:L6Zw5BDk >>882
しないこともあるのがSPAだよ。
しないこともあるのがSPAだよ。
887デフォルトの名無しさん
2018/02/16(金) 16:23:26.06ID:ijGXrmYh しないならしなければいいだけだろ?
何を言いたいのか分からん
何を言いたいのか分からん
888デフォルトの名無しさん
2018/02/16(金) 17:56:44.52ID:L6Zw5BDk889デフォルトの名無しさん
2018/02/16(金) 18:24:29.38ID:ijGXrmYh >>888
> リクエストのURIと同じURIのリソースを呼び出すこともあれば呼び出さないこともあるSPAだと。
それはページ内部の話だろ。クローラーからすりゃ関係ない話
クローラーが記録するのはブラウザのアドレスバーに表示される
あのURLのみと考えればいい。そのURLに対してGETリクエストを行うだけ
そもそもお前、SPAの初期ページの読み込みが遅いって問題と解決方法知ってるか?
https://qiita.com/takeshy/items/b7e1b6bd30d12ecb02c6
> 1.データを別々にAjaxで取得
> 各CollectionやModelがRESTを使ってデータをAjaxで取得するので、
> リクエスト数が多くて遅くなる上に、ブラウザの同じサイトに対しての同時リクエスト数制限にひっかかります。
> 1.に関しては、初期画面のHTMLにAjaxで取得予定のデータを予め埋め込んでしまい、
> 初期データとして使うことで初期画面表示時のAjax呼び出しをなくしました。
https://qiita.com/takeshy/items/ba8b3ee4606993c1c5b8
> 初期表示時にサーバとの通信を極力行わない
> SPAで作成する場合、各モデルごとにサーバとデータを同期する必要がありますが、
> データを初期のHTMLにJSONデータとして埋め込んでしまうことで、Ajax通信を回避することが可能です。
どうせこれやるんだから、この時にデータが見つからなければ404を返すだけの話だろ
> リクエストのURIと同じURIのリソースを呼び出すこともあれば呼び出さないこともあるSPAだと。
それはページ内部の話だろ。クローラーからすりゃ関係ない話
クローラーが記録するのはブラウザのアドレスバーに表示される
あのURLのみと考えればいい。そのURLに対してGETリクエストを行うだけ
そもそもお前、SPAの初期ページの読み込みが遅いって問題と解決方法知ってるか?
https://qiita.com/takeshy/items/b7e1b6bd30d12ecb02c6
> 1.データを別々にAjaxで取得
> 各CollectionやModelがRESTを使ってデータをAjaxで取得するので、
> リクエスト数が多くて遅くなる上に、ブラウザの同じサイトに対しての同時リクエスト数制限にひっかかります。
> 1.に関しては、初期画面のHTMLにAjaxで取得予定のデータを予め埋め込んでしまい、
> 初期データとして使うことで初期画面表示時のAjax呼び出しをなくしました。
https://qiita.com/takeshy/items/ba8b3ee4606993c1c5b8
> 初期表示時にサーバとの通信を極力行わない
> SPAで作成する場合、各モデルごとにサーバとデータを同期する必要がありますが、
> データを初期のHTMLにJSONデータとして埋め込んでしまうことで、Ajax通信を回避することが可能です。
どうせこれやるんだから、この時にデータが見つからなければ404を返すだけの話だろ
890デフォルトの名無しさん
2018/02/16(金) 18:31:57.24ID:ijGXrmYh >>888
> クライアントサイドだけが生成するものの404は、クライアントサイドだけでさばくべきかと。
> クライアントサイドだけが生成するものってのは、サーバに持ち込まない事がセキュリティ上の担保になるようなブラウザで生成するものになるだろうけど。
クライアントサイドだけが生成されるものというのはURLを持たないってことか?
URLを持たないページならクローラーの対象とならないんだから
そんなのどうでもいいだろ。URLがなb「ならクローラ=[はこねーよw
まさかURLを持たなくてもクロールしてくれるとか思ってねーよな?
クローラーがクリックイベントまでシミュレートして、URLは変わらないのに
ページ辿ってくれるとか思ってねーよな?しねーからなそんなこと
> https://www.bricoleur.co.jp/blog/archives/2628
> 原文:
> We don’t “click” during rendering so any click event will be ignored,
> but we do execute JavaScript that is triggered by for example onLoad events.
> > 原文:
> (Googlebotは)ページをレンダリングする際に何も「クリック」しない。
> 従って、クリックイベント(によって発生する動的なコンテンツ)は無視する。
> しかし、onLoadイベントなどがトリガーとなるようなJavaScriptについては実行する。
クローラーの動きとしては
1. ページを読み込んでレンダリングする
2. そのページのURLをかき集める
3. そのページは一旦閉じSPAが終了されてるのと同じ状態から、かき集めたURLの一つを読み込む
だからな。SPAアプリをクローラーが操作してくれるわけじゃない。
SPAの画面をそのままクロールしてくれるんじゃなくて、その状態からF5(画面更新)を
押して表示されたものしか見てくれないからな。だからURLがあることは必須
> クライアントサイドだけが生成するものの404は、クライアントサイドだけでさばくべきかと。
> クライアントサイドだけが生成するものってのは、サーバに持ち込まない事がセキュリティ上の担保になるようなブラウザで生成するものになるだろうけど。
クライアントサイドだけが生成されるものというのはURLを持たないってことか?
URLを持たないページならクローラーの対象とならないんだから
そんなのどうでもいいだろ。URLがなb「ならクローラ=[はこねーよw
まさかURLを持たなくてもクロールしてくれるとか思ってねーよな?
クローラーがクリックイベントまでシミュレートして、URLは変わらないのに
ページ辿ってくれるとか思ってねーよな?しねーからなそんなこと
> https://www.bricoleur.co.jp/blog/archives/2628
> 原文:
> We don’t “click” during rendering so any click event will be ignored,
> but we do execute JavaScript that is triggered by for example onLoad events.
> > 原文:
> (Googlebotは)ページをレンダリングする際に何も「クリック」しない。
> 従って、クリックイベント(によって発生する動的なコンテンツ)は無視する。
> しかし、onLoadイベントなどがトリガーとなるようなJavaScriptについては実行する。
クローラーの動きとしては
1. ページを読み込んでレンダリングする
2. そのページのURLをかき集める
3. そのページは一旦閉じSPAが終了されてるのと同じ状態から、かき集めたURLの一つを読み込む
だからな。SPAアプリをクローラーが操作してくれるわけじゃない。
SPAの画面をそのままクロールしてくれるんじゃなくて、その状態からF5(画面更新)を
押して表示されたものしか見てくれないからな。だからURLがあることは必須
891デフォルトの名無しさん
2018/02/16(金) 18:54:05.52ID:kN3UBOMP 数年前からクリックするようになってるよ
892デフォルトの名無しさん
2018/02/16(金) 19:30:14.75ID:PV55M7JN >>891
React-router-dom触ってると
onclickで遷移する仕組みがチュートリアルで紹介されてないんだよね。
(よく探すとあるけど。)
GoogleBotが辿ってくれるためにはAnchorである必要があるってことで
そのためにonClickじゃなくてLinkタグを使って遷移処理するようにするってことだね。
非同期通信を介してレンダリングすると一々Stateに保存してLinkタグを書くのがシンドいと思ってたんだけどSEOのためだったんだなぁ
React-router-dom触ってると
onclickで遷移する仕組みがチュートリアルで紹介されてないんだよね。
(よく探すとあるけど。)
GoogleBotが辿ってくれるためにはAnchorである必要があるってことで
そのためにonClickじゃなくてLinkタグを使って遷移処理するようにするってことだね。
非同期通信を介してレンダリングすると一々Stateに保存してLinkタグを書くのがシンドいと思ってたんだけどSEOのためだったんだなぁ
893デフォルトの名無しさん
2018/02/16(金) 19:33:28.56ID:ijGXrmYh なってるといいよねw
どちらにしろURLがないコンテンツは
クロールしてくれないことに変わりないんだがな
どちらにしろURLがないコンテンツは
クロールしてくれないことに変わりないんだがな
894デフォルトの名無しさん
2018/02/16(金) 19:36:08.89ID:ijGXrmYh >>892
リンクタグを使った所で、そのリンクを
アドレスバーに入れて表示されないと意味ないからね
クローラーはリンクのみを取り出してアドレスバーに入れて
表示されたものを、そのURLのコンテンツとして認識する
そこからクリックして変化したものまでクロールしてくれない
(普通に考えれば当たり前だが)
リンクタグを使った所で、そのリンクを
アドレスバーに入れて表示されないと意味ないからね
クローラーはリンクのみを取り出してアドレスバーに入れて
表示されたものを、そのURLのコンテンツとして認識する
そこからクリックして変化したものまでクロールしてくれない
(普通に考えれば当たり前だが)
895デフォルトの名無しさん
2018/02/16(金) 19:45:34.13ID:uCgPr+rC クリックじゃなく遅延して表示してるのはどうなるんだろ?何秒か適当にwaitしてから取ってんのかな?それとも
896デフォルトの名無しさん
2018/02/16(金) 19:54:10.08ID:ijGXrmYh >>895
運次第だろ?
1秒毎に変わるページでも作って、それがクロールされるかとか
やってみたら?少なくとも全部クロールされることはないだろうね
クリックされると副作用が現れるということで、
ページ上にクリックできるものが複数あって、
じゃあどれをクリックしたものをクロールされるのか?とかさ
考えてみれば不可能だってわかると思うんだが
クローラーがJavaScriptを実行するというのは
JavaScriptで動的に出したもの全てをクロールして
くれるわけじゃないことはわかるでしょ?
クロールされるのは指定したURLを表示して(JavaScriptで)
レンダリングした最初の画面ぐらいに思っておいたほうが良いよ
そこからのonclickは動かないとみなした方がいい
もちろんレンダリングした結果に含まれるリンクにはURLが書いてあるので
新たなクロール対象になる。
onclickの場合はURLが書いてないのでクロール対象にならない
運次第だろ?
1秒毎に変わるページでも作って、それがクロールされるかとか
やってみたら?少なくとも全部クロールされることはないだろうね
クリックされると副作用が現れるということで、
ページ上にクリックできるものが複数あって、
じゃあどれをクリックしたものをクロールされるのか?とかさ
考えてみれば不可能だってわかると思うんだが
クローラーがJavaScriptを実行するというのは
JavaScriptで動的に出したもの全てをクロールして
くれるわけじゃないことはわかるでしょ?
クロールされるのは指定したURLを表示して(JavaScriptで)
レンダリングした最初の画面ぐらいに思っておいたほうが良いよ
そこからのonclickは動かないとみなした方がいい
もちろんレンダリングした結果に含まれるリンクにはURLが書いてあるので
新たなクロール対象になる。
onclickの場合はURLが書いてないのでクロール対象にならない
897デフォルトの名無しさん
2018/02/16(金) 20:46:06.30ID:VmT4Fc/5 onclickにlocation.href='hoge/fuga.html'とか書いてあったらどうなんの?
898デフォルトの名無しさん
2018/02/16(金) 23:15:43.67ID:9uuqtBQX 結局404はどう解決するんだよ
899デフォルトの名無しさん
2018/02/16(金) 23:25:00.48ID:wAiK151t とりあえず、404って書いた画面表示しときゃいいだろ。
それで不満だって言うのなら何が気に入らないのかちゃんと挙げて議論。
それで不満だって言うのなら何が気に入らないのかちゃんと挙げて議論。
900デフォルトの名無しさん
2018/02/16(金) 23:57:21.24ID:ijGXrmYh >>898
あるURLに対してクローラーがアクセスしてくる場合には
サーバーサイド側で404を表示できる。
なぜならサーバーサイド側でそのリクエストを処理するから
その時にデータがなければ404を返せる
Ajaxを使ってアクセスする場合は、そのリクエストで404を返せばいい
あるURLに対してクローラーがアクセスしてくる場合には
サーバーサイド側で404を表示できる。
なぜならサーバーサイド側でそのリクエストを処理するから
その時にデータがなければ404を返せる
Ajaxを使ってアクセスする場合は、そのリクエストで404を返せばいい
901デフォルトの名無しさん
2018/02/17(土) 00:03:35.35ID:NuxITAVF902デフォルトの名無しさん
2018/02/17(土) 00:06:15.35ID:NuxITAVF ajaxを使って、同じURIから同じリソースを使うなら、クライアントで描画する必要無いよね。
そのURIの情報をDOMごと貰えばいい話になる。
どこのClassicASPのUpdatePanelの話なのかわからんレベルで無能じゃん。
アプリケーションだよ。
そのURIの情報をDOMごと貰えばいい話になる。
どこのClassicASPのUpdatePanelの話なのかわからんレベルで無能じゃん。
アプリケーションだよ。
903デフォルトの名無しさん
2018/02/17(土) 00:49:10.87ID:RdZUuX+v > ajaxを使って、同じURIから同じリソースを使うなら、クライアントで描画する必要無いよね。
あ、なるほどwwwww
そううかお前、サーバーサイドでレンダリングするって思っちゃってるんだwwww
SPA初心者だな。
クライアントでレンダリングするのに必要なデータをJSONでHTMLで埋め込むんだよ
そしてクライアントサイドでレンダリングするんだよ。
>>889のリンク先にもそう書いてあんだろ
で、クライアントでレンダリングするためのデータがなかったら、
404を返すだけの話だよ。
あ、なるほどwwwww
そううかお前、サーバーサイドでレンダリングするって思っちゃってるんだwwww
SPA初心者だな。
クライアントでレンダリングするのに必要なデータをJSONでHTMLで埋め込むんだよ
そしてクライアントサイドでレンダリングするんだよ。
>>889のリンク先にもそう書いてあんだろ
で、クライアントでレンダリングするためのデータがなかったら、
404を返すだけの話だよ。
904デフォルトの名無しさん
2018/02/17(土) 00:49:44.01ID:RdZUuX+v905デフォルトの名無しさん
2018/02/17(土) 02:40:20.72ID:+Fv80jjb F5押しても戻らないよ。
ルーターが処理してるから。
お前アホなんだろ。
ルーターが処理してるから。
お前アホなんだろ。
906デフォルトの名無しさん
2018/02/17(土) 02:48:01.65ID:+Fv80jjb そもそも、pathinfo使ってリダイレクトさせるのは別に動的なphpやサーブレットなんかだけが対象じゃなくて、htmlでも良いんだよ。
そのhtmlはサーバから取らなくてもサービスワーカーなりなんなりでブラウザ内で処理しちゃえるから、トラフィックは発生しない。
ブラウザ内でindexedDBなり使って復帰すればそれでいいんだから、同じURIにリクエスト投げる必要もなく、ブラウザ外に問い合わせて表示データを取る必要もない。
アプリケーションなの。APIが返す値を表示するだけのブラウザじゃないのよ。SPAと言うのは。
そのhtmlはサーバから取らなくてもサービスワーカーなりなんなりでブラウザ内で処理しちゃえるから、トラフィックは発生しない。
ブラウザ内でindexedDBなり使って復帰すればそれでいいんだから、同じURIにリクエスト投げる必要もなく、ブラウザ外に問い合わせて表示データを取る必要もない。
アプリケーションなの。APIが返す値を表示するだけのブラウザじゃないのよ。SPAと言うのは。
907デフォルトの名無しさん
2018/02/17(土) 03:26:51.10ID:RdZUuX+v >>905
F5押しても戻らないってことはURLがあるってことじゃねーかw
F5押しても戻らないってことはURLがあるってことじゃねーかw
908デフォルトの名無しさん
2018/02/17(土) 11:50:05.04ID:+Fv80jjb909デフォルトの名無しさん
2018/02/17(土) 12:10:00.79ID:W+GNXAq+ F5で完全に戻らないとしてもURLだけで
そのアプリケーションの全ての値が復元できるとも限らない
そのアプリケーションの全ての値が復元できるとも限らない
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★5 [BFU★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【ローソン】ロゴの「L」で誤解生んだコーヒーカップ、デザイン変更へ 在庫使い切る3か月後にリニューアル [ぐれ★]
- 【悲報】SANA、発言撤回拒否 [769931615]
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- 日本「中国製品買うの辞めます。中国旅行辞めます。」 中国「あぁ、そう…」
- ジャーナリストがテレビで解説「台湾問題は高市総理から言ったのではなく、立憲民主が日本の対応可能能力を暴こうとしたから」 [359572271]
- 「遺体、安倍、会いたい」👈逆から読んでみて [175344491]
- お前らの知能指数教えてや
